計算機圖形學(一)

設備參數:
1.圖形控制設備:

最大支持的分辨率爲:2560×1600。

Nvidia GeForce GTX860M顯卡參數:

所屬品牌:NVIDIA;

芯片型號:GeForce GTX 860M;

顯存容量:2048M;

顯存類型:GDDR 5;

顯存頻率:2500MHz;

流處理器:1152個;

製作工藝:28納米;

核心位寬:128bit。

2.顯示設備:1920x1080
3.開發環境 CodeBlocks + glut

一.基本認識

1.頭文件

#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>//GLUT處理窗口

2.main
main函數的參數

  前面介紹的main函數都是不帶參數的。因此main 後的括號都是空括號。實際上,main函數可以帶參數,這個參數可以認爲是 main函數的形式參數。C語言規定main函數的參數只能有兩個, 習慣上這兩個參數寫爲argc和argv。因此,main函數的函數頭可寫爲: main (argc,argv)C語言還規定argc(第一個形參)必須是整型變量,argv( 第二個形參)必須是指向字符串的指針數組。加上形參說明後,main函數的函數頭應寫爲:
main (argc,argv)
int argv;
char *argv[];或寫成:
main (int argc,char *argv[])
  由於main函數不能被其它函數調用, 因此不可能在程序內部取得實際值。那麼,在何處把實參值賦予main函數的形參呢? 實際上,main函數的參數值是從操作系統命令行上獲得的。當我們要運行一個可執行文件時,在DOS提示符下鍵入文件名,再輸入實際參數即可把這些實參傳送到main的形參中去。

  DOS提示符下命令行的一般形式爲: C:>可執行文件名 參數 參數……; 但是應該特別注意的是,main 的兩個形參和命令行中的參數在
位置上不是一一對應的。因爲,main的形參只有二個,而命令行中的參數個數原則上未加限制。argc參數表示了命令行中參數的個數(注意:文件名本身也算一個參數),argc的值是在輸入命令行時由系統按實際參數的個數自動賦予的。例如有命令行爲: C:>E6 24 BASIC dbase FORTRAN由於文件名E6 24本身也算一個參數,所以共有4個參數,因此argc取得的值爲4。argv參數是字符串指針數組,其各元素值爲命令行中各字符串(參數均按字符串處理)的首地址。 指針數組的長度即爲參數個數。數組元素初值由系統自動賦予。

3.一個完整的程序

#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>//GLUT處理窗口
#include <cstdio>
//第一個程序我們要顯示簡單的二維線段(採用onengl三維觀察)
void init (void){
    glClearColor(1.0, 1.0, 1.0, 0.0);//設置顯示窗口背景顏色(白色)
    glMatrixMode(GL_PROJECTION);//使用正投影將世界座標系二維區域映射到屏幕上
    gluOrtho2D(0.0,200.0,0.0,150.0);//區域的x座標從0.0到200.0,y座標從0.0到150.0任何該座標範圍外的內容都不會顯示出來
}

void lineSegment(void){
    glClear(GL_COLOR_BUFFER_BIT);//清空顯示窗口,使之前賦值的窗口得到顯示,GL_COLOR_BUFFER_BIT常量用來指定它是顏色緩存(刷新緩存)中的位值,該緩存將使用glClearColor中設置的值來設定。

    glColor3f(0.0, 0.4 ,0.2);//3f表示使用RGB分量時採用浮點數,設置線段顏色
    glBegin( GL_LINES );
        glVertex2i(180,15);//2i,兩個整型分量
        glVertex2i(10,145);
    glEnd();//定義了一個從整數笛卡爾端點座標(180,15)到(10,145)的二維直線段

    glFlush();//強制執行清空緩存
}

int main(int argc, char* argv[]){
    glutInit(&argc, argv);//GLUT初始化
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//指定顯示窗口緩存和顏色模型等選項(使用單個緩存|使用RGB顏色模型)
    glutInitWindowPosition(50,100);//指定顯示窗口的位置,顯示窗口左上角在屏幕左邊界向右50像素,屏幕上邊界向下100像素位置上
    glutInitWindowSize(400,300);//指定一個寬400像素,高300像素的顯示窗口
    glutCreateWindow("sadasdasa1");//給定一個標題
    init();//執行初始化過程

    glutDisplayFunc(lineSegment);//將(lineSegment)圖賦給顯示窗口
    glutMainLoop();//激活,循環顯示圖形直到顯示窗口關閉,必須是程序中最後一個
}

4.出錯檢查

GLenum errorCheck (){
    GLenum code;
    const GLubyte * string;
    code = glGetError();
    if (code != GL_NO_ERROR){
        string = gluErrorString (code);
        fprintf(stderr, "OpenGL error: %s\n", string);
    }

    return code;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章