日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenGL概述(核心模式与立即模式、扩展、OpenGL中的对象)

發布時間:2024/1/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenGL概述(核心模式与立即模式、扩展、OpenGL中的对象) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 關于OpenGL的理解

OpenGL本身不是一個API,而是一個規范

OpenGL是一個巨大的狀態機(state machine),它是定義OpenGL現在該如何工作的變量的集合。

  • OpenGL的狀態state通常指的是OpenGL的語境context,我們通過設置一些選項改變OpenGL的狀態,以操作一些buffers并使用當前的context渲染。

2 核心模式(Core-profile)與立即模式(Immediate mode)

2.1 立即模式特點

Immediate mode也稱作fixed function pipeline。

  • 容易使用
  • 靈活性差(隱藏過多細節)
  • 效率低下
  • 因此,在OpenGL3.2+的版本中,立即模式被棄用了。

    2.2 核心模式的特點

  • 難以學習(需要對圖形編程有更好的理解)
  • 靈活
  • 更高效
  • 3 擴展(Extensions)

    非常有用和受歡迎的擴展未來可能會集成到OpenGL的更高版本中,在使用擴展的功能前,一般要確認擴展是否存在。

    if(GL_ARB_extension_name){//使用擴展完成功能 } else{//擴展不支持,使用傳統方法完成功能 }

    4 OpenGL中的對象(Object)

    OpenGL中的對象是一些選項的集合,它代表OpenGL狀態的一個子集。

    struct object_name{float option1;int option2;char[] name; };

    實際使用的例子(OpenGL_Context是OpenGL上下文):

    struct OpenGL_Context{...object_name* object_Window_Target;... } //create object unsigned int objectId=0; glGenObject(1,&objectId); // bind/assign object to context glBindObject(GL_WINDOW_TARGET, objectId); // set options of the object bound to GL_WINDOW_TARGET glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800); glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 600); //set context target back to default glBindObject(GL_WINDOW_TARGET,0);

    上述代碼展示了OpenGL的工作流程:

  • 創建對象——glGenObject。
  • 以id的方式存儲對象的reference——glBindObject(GL_WINDOW_TARGET, objectId)。
  • 使用id,將對象綁定到context的目標位置``。
  • 使用對象的好處:一個程序中,我們不止可以定義一個對象,并設置它們的選項,每個對象都可以是不同的設置。在我們執行一個使用OpenGL狀態的操作的時候,只需要綁定含有需要的設置的對象即可。

    總結

    以上是生活随笔為你收集整理的OpenGL概述(核心模式与立即模式、扩展、OpenGL中的对象)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。