1. 程式人生 > >初試openGl — 三維圖形

初試openGl — 三維圖形

#include <GL/glut.h>
#include <windows.h>
#include <stdlib.h>
#include <math.h>
#define GLUT_DISABLE_ATEXIT_HACK

GLfloat AngleX;
GLfloat AngleY;
GLfloat sca[3] = {1,1,1};
GLfloat tra[3] = {0,0,0};

void display1(){                    //sphere,cone
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glPushMatrix();
    {
        glRotatef(AngleX, 1.0f, 0.0f, 0.0f);
        glRotated(AngleY, 0.0f, 1.0f, 0.0f);
        glScalef(sca[0], sca[1], sca[2]);
        glTranslatef(tra[0], tra[1], tra[2]);

glBegin(GL_TRIANGLE_FAN);
glColor3f(0.0f, 0.0f, 0.0f);
        glutWireSphere(18, 14, 14);
        glutWireCone(30, 40, 30, 30);
glEnd();
    }
    glPopMatrix();

    glutSwapBuffers();
}

void reshape(int w, int h){
    GLfloat aspect = (GLfloat)w / (GLfloat)h;
    GLfloat nRange = 100.0f;

    glViewport(0, 0, w, h);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    if (w <= h){
        glOrtho(-nRange, nRange, -nRange*aspect, nRange*aspect, -nRange, nRange);
    }
    else
        glOrtho(-nRange, nRange, -nRange / aspect, nRange / aspect, -nRange, nRange);
}

void Skeyboard(GLint key, GLint x, GLint y){   //control Rotate
    if (key == GLUT_KEY_UP)
        AngleX -= 5.0f;
    if (key == GLUT_KEY_DOWN)
        AngleX += 5.0f;
    if (key == GLUT_KEY_LEFT)
        AngleY -= 5.0f;
    if (key == GLUT_KEY_RIGHT)
        AngleY += 5.0f;


    if (AngleX > 355.0f)
        AngleX = 0.0f;
    if (AngleX < 0.0f)
        AngleX = 355.0f;


    glutPostRedisplay();
}


void Nkeyboard(unsigned char key, int x, int y){   //control scale and translate
    if (key == 'j'){
        for (int i = 0; i < 3; i++)
            sca[i] += 0.1;
    }
    if (key == '-'){
        for (int i = 0; i < 3; i++)
            sca[i] -= 0.1;
    }
    if (key == 'w'){
        tra[1]++;
    }
    if (key == 's'){
        tra[1]--;
    }
    if (key == 'a'){
        tra[0]--;
    }
    if (key == 'd'){
        tra[0]++;
    }
    if (key = 'q'){
        tra[2]++;
    }
    if (key = 'e'){
        tra[2]--;
    }

    glutPostRedisplay();
}

void init(){
    AngleX = 45.0f;
    AngleY = 315.f;

    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

    glEnable(GL_DEPTH_TEST);
    glEnable(GL_DITHER);
    glShadeModel(GL_SMOOTH);
}

int main(int argc, char *argv[]){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(800, 600);
    glutCreateWindow("三維圖形");

    glutReshapeFunc(reshape);
    glutDisplayFunc(display1);
    glutSpecialFunc(Skeyboard);
    glutKeyboardFunc(Nkeyboard);

    init();
    glutMainLoop();
    return 0;
}

相關推薦

初試openGl圖形

#include <GL/glut.h> #include <windows.h> #include <stdlib.h> #include <math.h> #define GLUT_DISABLE_ATEXIT_HACK GLfloat AngleX; GL

[計算機圖形學 with OpenGL] Chapter10 OpenGL觀察程序示例

chap 而不是 max argv func open position style windows   10.10節書中給出了一個程序示例,有一個填充正方形,從側面的角度觀察並畫到屏幕上。   圖0   這裏進一步畫出一個立方體,將相機放入立方體中心,旋轉相機,達到在

Bubble圖形引擎簡介

模塊 images c++編寫 sdl2 支持 ima 包括 .com glsl Bubble是一款基於OpenGL的3D圖形引擎,主要使用C++編寫,采用CMake構建工具構建,基於OpenGL可編程管線,支持GLSL著色器語言。這是一個用於學習和實踐的項目,目前尚在開發

【WPF】用三角形網格構建圖形

遊戲 輸入 angle 結構 dash bsp 來看 適應 鼠標 雖然WPF只能支持部分三維模型,不過從應用功能開發的角度看,也已經夠用了(非遊戲開發)。WPF 的三維圖形,說得簡單一點,也就兩種而已。 1、把二維對象放到三維空間中,這個應該較為好辦,像 Image 控件

MATLAB繪制圖形

opp 公式 代碼 AR mage imageview mesh ans alt 1.畫橢球 1.1 圓心在(0,0,0) [x,y,z]=sphere(30);%30是畫出來的球面的經緯分面數...30的話就是30個經度, 30個緯度 surf(x,y,z) 1.2 圓

圖形 surfh 和 mesh

clas com .com tlab sha src class orm int z=peaks(50); surfl(z) shading interp colormap copper   三維圖形 surfh 和 mesh

圖形變換

四階 視圖 分類 平移 缺點 兩種 直線 交點 之間 三維圖形變換 是在二維方法基礎上增加了對z坐標的考慮得到的。與二維變換類似,引入齊次坐標表示,即:三維空間中某點的變換可以表示成點的齊次坐標與四階的三維變換矩陣相乘。 一、平移變換 二.比例變換 例如:對長方體進

CG-二圖形變換-學習筆記

結果 設備 right 可行性 spl http 情況下 width 範圍 一、計算機圖形學中坐標系分類 世界坐標系、建模坐標系、觀察坐標系、設備坐標系、規範化坐標系 其中:規範化坐標系是一個中間坐標系,坐標值取值範圍0-1; 二、二維圖形變換 1. 變換種類:比例、旋轉、

OpenGL的一些常用函式

1、glMatrixMode();       引數有三個:GL_PROJECTION 投影, GL_MODELVIEW 模型檢視, GL_TEXTURE 紋理. 即表示:接下來要對投影/模型檢視/紋理進行操作 2、glLoadIdentity();&

怎麽在CAD中繪制圖形

mar 編輯器 下拉 htm tex 官網 技巧 安裝 人員 在CAD中繪制CAD圖紙的時候,建築設計師們在使用的過程中,不僅要使用到平面圖形,還要繪制三維圖形,因為三維圖形繪制出來的效果更加的接近實物,那問題就來了,怎麽在CAD中繪制三維圖形?那不會的小夥伴們就可以來看看

圖形 ---- 三角形與直線碰撞原理(包含 JavaScript 程式碼)

//碰撞的三角形 var triangleVertices = new Float32Array([-1.9, 0.1, -0.1, -0.4, 1.9, 0.5, 0.6, 0.1, 4.7]); //碰撞的直線 var lineVertices

2.遺傳演算法matlab實現(2):再加例項兩個(一元二元完整作圖,二圖形,圖形以及進化過程圖)

(1)直接在命令視窗輸入以下程式碼: figure(1); hold on; lb=1;ub=2; %函式自變數範圍[1,2] ezplot('sin(10*pi*X)/X',[lb,ub]);

(17)圖形幾何變換

三維圖形的基本變換矩陣 三維圖形幾何變換是二維圖形幾何變換的擴充套件。在三維空間中,用規範化齊次座標[x  y  z  1]表示三維點,變換原理是把齊次座標點(x, y, z, 1)通過變換矩陣變換成

openGL網格座標,旋轉,縮放,燈光設定,紋理讀取,模型讀取(MFC單文件)

1.三維網格座標建立 2.基本3維圖形建立 3.滑鼠相應旋轉縮放 4.鍵盤相應旋轉縮放 5.燈光設定 6.紋理載入對映 7.讀取模型 關於MFC配置編寫openGL網上有很多教程 需要的函式建立一般是: OnCreat()

python matplotlib模組——繪製圖形資料散點圖

python matplotlib模組,是擴充套件的MATLAB的一個繪圖工具庫。他可以繪製各種圖形,可是最近最的一個小程式,得到一些三維的資料點圖,就學習了下python中的matplotlib模組,

圖形顯示流程

目的:將三維場景轉化為螢幕二維影象。組成:可分為三個階段 application階段,cpu處理(1). 資料準備。一個是模型載入(mesh,texture等);二是攝像機(位置,朝向等);三是光源(位置,型別等)。(2). 裁剪和剔除。(3). 計算模型檢視矩陣。(4). 設定渲染狀態,呼叫Draw

圖形幾何變換

與二維變換矩陣相似,採用齊次座標的三維變換矩陣為同樣可以分為四個子矩陣:對影象進行比例,旋轉,錯切,對稱等幾何變換,產生平移變換,對圖形進行投影變換,對整體進行比例變換.1 平移變換:x方向移動d,y方向移動h,z方向移動l2 比例變換:x方向擴大a倍,y方向擴大f倍,z方向

opengl觀察

1.      相機 產生目標場景檢視的變換過程類似於用照相機進行拍照。用照相機進行拍照的步驟大致如下: ·把照相機固定在三腳架上,並讓它對準場景(檢視變換); ·對場景進行安排,使各個物體在照片中的位置是我們所希望的(模型變換) ·選擇照相機鏡頭,並調整放大倍數(投影變換

html5<canvas模擬圖形>(旋轉的正方體)

<html>      <head>           <style>           canvas{             background:#eee;           }           </style>           <ti

WPF圖形

wpf 三維圖形基礎生成三維圖形的基本思想是能得到一個物體的三維立體模型(model)。由於我們的螢幕只有二維,因而我們定義了一個用於給物體拍照的照相機(Camera)。拍到的照片其實是物體到一個平坦表面的投影。這個投影由3D渲染引擎渲染成點陣圖。引擎通過計算所有光源對3D