用OpenGL實現跳躍的立體小球

2021-09-08 13:25:24 字數 2147 閱讀 8230

掌握opengl中顯示列表物件的使用方法。

github位址

#include "

stdafx.h

"#include

#include

#include

#include

#include

//色彩全域性常量

glfloat white = ; //

白色glfloat red = ; //

紅色glfloat green = ; //

綠色glfloat magenta = ; //

洋紅//

攝像機類:水平移動半徑為10,按上下鍵則垂直移動

class

camera

//類方法

double getx()

double gety()

double getz()

void moveright()

void moveleft()

void moveup()

void movedown()

};//

球類定義

//半徑、顏色、最大高度

//x和z固定

//用lame bouncing algorithm

//每幀上下移動0.05單位

class

ball

//更新和繪製方法

void

update()

else

if (y

glpushmatrix();

//單獨設定每個球的材質引數

glmaterialfv(gl_front, gl_ambient_and_diffuse, color);

gltranslated(x, y, z);

//建立球

glutsolidsphere(radius, 30, 30

); glpopmatrix();

}};//

棋盤格:沿x和z平面分布

//點光源位置設定為(4, 3, 7).

class

checkerboard

//中心x

double centerx()

//中心y

double centerz()

//建立方法

void

create() ;

//設定光源位置

gllightfv(gl_light0, gl_position, lightposition);

//開始繪製四邊形

glbegin(gl_quads);

//法向量方向

glnormal3d(0, 1, 0

);

for (int x = 0; x < width - 1; x++)

}glend();

glendlist();

}//按列表編號繪製棋盤格

void

draw()

};//

全域性變數:棋盤格、相機和3個球的陣列

checkerboard checkerboard(8, 8

);camera camera;

//建立3個小球的陣列

ball balls =;

//自定義初始化方法

void

init()

//自定義繪製函式

//通過類繪製各物件,display函式**得以簡化

void

display()

//glflush();

glutswapbuffers();}//

視窗調整大小時呼叫的函式

void

reshape(glint w, glint h)

//自定義計時器函式

void timer(int

v) //

鍵盤處理函式

用OpenGL實現射線揀取物件

本文 http bbs.gameres.com showthread.asp?postid 100771 關於用射線原理來揀取物件網上已經有完整的理論,另外directx也提供了乙個pick例子來演示,在這裡我將這些資料和理論來稍微的總結,並給出opengl下的完整實現。相關的理論大體來自一篇英文資...

有趣的跳躍(用檔案操作)

問題描述 乙個長度為 n n 0 的序列中存在 有趣的跳躍 當且僅當相鄰元素的差的絕對值經過排 序後正好是從 1 到 n 1 例如 1 4 2 3 存在 有趣的跳躍 因為差的絕對值分別為 3,2,1。當然,任何只包含單個元素的序列一定存在 有趣的跳躍 你需要寫乙個程式判定給定序列是 否存在 有趣的跳...

跳躍遊戲的python實現

給定乙個非負整數列表,假定你的初始位置為列表第乙個下標。列表中的每個元素代表你在那個位置能夠跳躍的最大長度。請確認你是否能夠跳躍到列表的最後乙個下標。例如 輸入 a 2,3,1,1,4 輸出 true 輸入 a 3,2,1,0,4 輸出 false 採用貪心演算法方式,主要思想就是從列表中的第乙個元...