首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

OpenGL 三維繪圖入門:環境建置與基本管線

     編輯:關於VC++

初始化 OpenGL 繪圖環境

1. 顏色模式與緩衝區

auxInitDisplayMode(AUX_DOUBLE | AUX_RGBA); // 雙緩衝 + RGBA 模式

RGBA 模式適合光照、霧效、融合等進階效果;雙緩衝消除閃爍。

2. 光源設定

  • 環境光、漫射光、鏡面光三要素。
  • glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); 設定漫射光顏色。
  • glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); 設定全域環境光。
  • glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); 啟用。

3. 材質屬性

glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);

最終像素顏色 = 光源分量 × 材質反射率。

4. 投影矩陣

  • 正交投影 glOrtho:CAD 繪圖,大小不隨距離變化。
  • 透視投影 gluPerspective:符合視覺習慣,近大遠小。

Windows 整合回呼函式

auxInitPosition(0, 0, 400, 400);
auxInitWindow("OpenGL Demo");
auxReshapeFunc(myReshape);   // 視窗大小改變
auxIdleFunc(Idledisplay);    // 空閒時動畫
auxMainLoop(display);        // 主繪圖迴圈

範例程式:旋轉球體動畫

void myinit() {
    glClearColor(1,1,0,0);
    // ... 光源/材質設定 ...
    glEnable(GL_DEPTH_TEST);
}
void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    auxSolidSphere(1.0);
    glFlush(); auxSwapBuffers(); _sleep(100);
}
void Idledisplay() {
    static float x=-0.1, y=0, step=0.01;
    x += step;
    if (x<=0.1 && x>=-0.1) {
        y = (step>0) ? sqrt(0.01-x*x) : -sqrt(0.01-x*x);
        glTranslatef(x, y, 0);
    } else step = -step;
    display();
}
void myReshape(GLsizei w, GLsizei h) {
    glViewport(0,0,w,h);
    glMatrixMode(GL_PROJECTION); glLoadIdentity();
    if (w<=h) glOrtho(-3.5,3.5, -3.5*h/w,3.5*h/w, -10,10);
    else      glOrtho(-3.5*w/h,3.5*w/h, -3.5,3.5, -10,10);
    glMatrixMode(GL_MODELVIEW); glLoadIdentity();
}

VC++ 專案設定

連結庫:opengl32.lib glu32.lib glaux.lib。執行時需 opengl32.dll、glu32.dll 於系統目錄。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved