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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

opengl微开发之1-从零開始

發布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opengl微开发之1-从零開始 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對OpenGL有一點了解之后,如今開始真正編寫代碼。

今天的內容:

? ? ? ? 使用FreeGLUT創建OpenGL的上下文環境

? ? ? ? 初始化GLEW

? ? ? ? 創建一個OpenGL的的模板范例


第一步:

? ? ? ? ?一個OpenGL的上下文能夠同意我們傳遞命令究竟層硬件,所以須要一個上下文環境。首先須要配置一個功能窗體,創建一個名為chapter1.c的文件,在你的編輯器或者集成開發環境中打開它,插入例如以下代碼:

#include <stdlib.h> #include <stdio.h> #include <string.h> #include <GL/glew.h> #include <GL/freeglut.h> #define WINDOW_TITLE_PREFIX "Chapter 1"intCurrentWidth = 800,CurrentHeight = 600,WindowHandle = 0;void Initialize(int, char*[]); void InitWindow(int, char*[]); void ResizeFunction(int, int); void RenderFunction(void);int main(int argc, char* argv[]) {Initialize(argc, argv);glutMainLoop();exit(EXIT_SUCCESS); }void Initialize(int argc, char* argv[]) {InitWindow(argc, argv);fprintf(stdout,"INFO: OpenGL Version: %s\n",glGetString(GL_VERSION));glClearColor(0.0f, 0.0f, 0.0f, 0.0f); }void InitWindow(int argc, char* argv[]) {glutInit(&argc, argv);glutInitContextVersion(4, 0);glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);glutInitContextProfile(GLUT_CORE_PROFILE);glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS);glutInitWindowSize(CurrentWidth, CurrentHeight);glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);WindowHandle = glutCreateWindow(WINDOW_TITLE_PREFIX);if(WindowHandle < 1) {fprintf(stderr,"ERROR: Could not create a new rendering window.\n");exit(EXIT_FAILURE);}glutReshapeFunc(ResizeFunction);glutDisplayFunc(RenderFunction); }void ResizeFunction(int Width, int Height) {CurrentWidth = Width;CurrentHeight = Height;glViewport(0, 0, CurrentWidth, CurrentHeight); }void RenderFunction(void) {glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glutSwapBuffers();glutPostRedisplay(); }
編譯執行之,將會得到例如以下窗體:



解釋:

WINDOW_TITLE_PREFIX ?定義窗體名字

CurrentWidth、CurrentHeight ?窗體的尺寸

WindowHandle ? FreeGLUT創建的窗體處理句柄


初始化:

聲明函數原形并定義main應用程序入口函數,在Initialize函數中調用InitWindow函數。InitWindow調用幾個FreeGLUT函數創建一個窗體,以glutInit函數開始,其作用是初始化FreeGLUT類庫。其參數是main傳入的兩個參數,你也能夠不使用不論什么參數。


上下文類型和窗體選項:

? ? ? ? glutInitContextVersion

? ? ? ? glutInitContextFlags

? ? ? ? glutInitContextFrofile


? ? ? ? glutSetOption 其參數GLUT_ACTION_ON_WINDOW_CLOSE是確保glutMainLoop函數在main結束時將其清除。

? ? ? ? glutInitWindowSize 初始化窗體的尺寸


顯示模式:

? ? ? ? glutInitDisplayMode ?定義OpenGL上下文類型,設備應該怎樣渲染場景,選擇有:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? GLUT_DEPATH ?啟動Depth buffer,也叫Z-buffer,依據它來決定像素屏幕上的渲染順序

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GLUT_DOUBLE ?啟動 double-buffer,也就是開啟前后端顯示緩存,主要是降低圖片的閃爍

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GLUT_RGBA ? ? ? ?定義色彩的混合模式,即RGBA混合模式


創建窗體:

glutCreateWindow 創建我們的上下文環境并返回新創建的窗體處理句柄。其參數WINDOW_TITLE_PREFIX即窗體的名稱


函數回調:

glutReshapeFunction 處理窗體尺寸

glutDisplayFunction ?渲染場景


調試輸出:

glGetString 獲取OPengl的版本號

fprintf ?c函數,打印字符

例如以下:



屏幕刷新顏色:

? ? ? glClearColor ?其參數相應的是FreeGLUT的GLUT_RGBA設置模式,值范圍0~1.0f相應1~100%色彩強度。

? ? ? 以下是RGBA的混合直觀效果圖:


? ?樣例:

? ? ? ? ?

  • glClearColor(1.0f, 0.0f, 0.0f, 0.0f);?for red
  • glClearColor(0.0f,?1.0f, 0.0f, 0.0f);?for green
  • glClearColor(0.0f, 0.0f,?1.0f, 0.0f);?for blue
  • glClearColor(1.0f, 0.0f,?1.0f, 0.0f);?for purple
  • glClearColor(0.0f, 0.0f,?0.5f, 0.0f);?for dark blue

最后的參數是透明度。
主循環: ? ? ? ?glutMainLoop 僅僅要窗體處于活動狀態,就會不斷運行這個函數,知道窗體退出。 ? ? ? ? 重置渲染尺寸: ? ? ? ? ResizeFunction 其CurrentWith和CurrentHeight窗體尺寸 ? ? ? ? ?glViewpoirt ?參數為X-coordinate,Y-coordinate,width,height即渲染的規格尺寸

渲染: ? ?RenderFunction 繪制對象 ? ?glclear 即第一次往后端緩存中填充的顏色,之后在上面繪制其它對象 ? ?glutSwapBuffer?交換前后端顯示緩存數據
調用玩glutSwapBuffers之后:

加入GLEW:

轉載于:https://www.cnblogs.com/mengfanrong/p/4246309.html

總結

以上是生活随笔為你收集整理的opengl微开发之1-从零開始的全部內容,希望文章能夠幫你解決所遇到的問題。

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