社区
游戏开发
帖子详情
请问OpenGL 的GL_LIGHT0 GL_LIGHT1 有什么用处
geniusdhc
2004-03-14 11:47:47
那位可以给我解释一下glOttho倒是是什么意思,谢谢各位.
...全文
598
5
打赏
收藏
请问OpenGL 的GL_LIGHT0 GL_LIGHT1 有什么用处
那位可以给我解释一下glOttho倒是是什么意思,谢谢各位.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pannan
2004-03-15
打赏
举报
回复
GL_LIGHT0表示第一个光源。
GL_LIGHT1表示第二个光源。
geniusdhc
2004-03-15
打赏
举报
回复
那GL_LIGHT0 GL_LIGHT1 有什么用处?
hell190109
2004-03-14
打赏
举报
回复
关注
lwqzl
2004-03-14
打赏
举报
回复
写错了吧,是glOrtho吧
这是设置视野的一个函数,是正射投影,还有一个gluPerspective,是透视投影
使用正射投影时,各面的逻辑宽度都相同,也就是说离视点3公里和离视点3米看起来效果是一样的
有四个参数,分别是X、y方向的最值,没有Z方向
geniusdhc
2004-03-14
打赏
举报
回复
今天都不上网吗?
gl
_
Light
Source.zip_
gl
_
Light
Source_
light
_
open
gl
PDF from from wiki
open
gl
web site.
open
gl
期末复习资料
open
gl
期末复习资料 第一、二章: 1、
Open
GL
中能渲染的基本元素是什么?
GL
U 可以渲染哪些基本元素? 第三章 2、 用框图说明
Open
GL
的渲染流程,并简要说明每个坐标系。 第四、五章 3、 写出
Open
GL
中局部光照的方程,要包含的系数有光源参数、材料参数、聚光灯的参数、衰减参数等,方程要表示是多个光源的。 4、 分析程序并计算 请看下面的一段程序,并计算三个顶点○1、○2和○3处的光照的颜色值。 void init(void) {
GL
float mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GL
float mat_shininess[] = { 50.0 };
GL
float
light
_position[] = { 1.0, 1.0, 1.0, 0.0 };
gl
ClearColor (0.0, 0.0, 0.0, 0.0);
gl
ShadeModel (
GL
_SMOOTH); //
gl
Light
Modelf(
GL
_
LIGHT
_MODEL_LOCAL_VIEWER,
GL
_FALSE); //
gl
Light
Modelf(
GL
_
LIGHT
_MODEL_TWO_SIDE,
GL
_FALSE);
gl
Materialfv(
GL
_FRONT,
GL
_SPECULAR, mat_specular);
gl
Materialfv(
GL
_FRONT,
GL
_SHININESS, mat_shininess);
gl
Light
fv(
GL
_
LIGHT
0,
GL
_POSITION,
light
_position);
gl
Enable(
GL
_
LIGHT
ING);
gl
Enable(
GL
_
LIGHT
0);
gl
Enable(
GL
_DEPTH_TEST); } void display(void) {
gl
Clear (
GL
_COLOR_BUFFER_BIT |
GL
_DEPTH_BUFFER_BIT);
gl
Begin(
GL
_TRIAN
GL
ES);
gl
Normal3f(..); ○1
gl
Vertex3f(1.0, 0.0, 0.0); ○2
gl
Vertex3f(0.0, 1.0, 0.0); ○3
gl
Vertex3f(0.0, 0.0, 1.0);
gl
End();
gl
Flush (); } void reshape (int w, int h) {
gl
Viewport (0, 0, (
GL
sizei) w, (
GL
sizei) h);
gl
MatrixMode (
GL
_PROJECTION);
gl
LoadIdentity(); if (w <= h)
gl
Ortho (-1.5, 1.5, -1.5*(
GL
float)h/(
GL
float)w, 1.5*(
GL
float)h/(
GL
float)w, -10.0, 10.0); else
gl
Ortho (-1.5*(
GL
float)w/(
GL
float)h, 1.5*(
GL
float)w/(
GL
float)h, -1.5, 1.5, -10.0, 10.0);
gl
MatrixMode(
GL
_MODELVIEW);
gl
LoadIdentity(); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } int main(int argc, char** argv) {
gl
utInit(&argc, argv);
gl
utInitDisplayMode (
GL
UT_SIN
GL
E |
GL
UT_RGB |
GL
UT_DEPTH);
gl
utInitWindowSize (500, 500);
gl
utInitWindowPosition (100, 100);
gl
utCreateWindow (argv[0]); init ();
gl
utDisplayFunc(display);
gl
utReshapeFunc(reshape);
gl
utKeyboardFunc(keyboard);
gl
utMainLoop(); return 0; } 第9章 在
Open
GL
中,使用纹理的步骤是什么?纹理坐标和纹理都可以通过程序计算出来,自动生成纹理的原理是什么? 第10章 帧缓存有几种,什么叫片元,片元的测试和操作有哪些? 明白stencilbuffer的使用。 用stencilbuffer编程实现一个功能。 5、 采用GPU编程,请说明Vertex Shader 和 Fragment Shader 的输入输出坐标系是什么? 输入输出的主要参数是什么? 如何实现Multi-Pass 渲染? 6、 在一个坐标系W中,光源的位置为 (0, 0, 200, 1.0),设模型为一个以(1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0)为三个点的三角形,另一个模型是以(0, 0, 10)为中心,长度为2的一个正方体,如何实现该正方体在三角形平面上的阴影?如何使用
Open
GL
函数来实现?要求在照相机改变时,该程序应该仍然有效。 7、 如何实现纹理的反走样?说明其原理。 8、 写出场景的反走样算法,并说明其原理。 9、 如何实现采用立方体映射实现的环境映射,写出立方体映射的生成算法和把其作为环境映射时显示的程序。 10、 请列举出3种以上的三维模型常见的表示格式,已知一个立方体环境映射对应的六个面上的图片,分别假定为X_POSITVIE_PIC, X_NEGATIVE_PIC, Y_POSITIVE_PIC, Y_NEGATIVE_PIC, Z_POSITIVE_PIC, Z_NEGATIVE_PIC,请用OBJ格式表示一个长度为1的立方体,并把每个面分别贴上给定的六个图片。 11、 分析下面的程序并计算 在下面的例子中,计算对应○1○2○3○4四个顶点所对应的四边形上的一个点(-1.0, 0.5, 0.0)对应的纹理坐标是多少?按照最近邻域滤波方法,该点对应的颜色是什么? /* Create checkerboard texture */ #define checkImageWidth 64 #define checkImageHeight 64 static
GL
ubyte checkImage[checkImageHeight][checkImageWidth][4]; #ifdef
GL
_VERSION_1_1 static
GL
uint texName; #endif void makeCheckImage(void) { int i, j, c; for (i = 0; i < checkImageHeight; i++) { for (j = 0; j < checkImageWidth; j++) { c = ((((i&0x8)==0)^((j&0x8))==0))*255; checkImage[i][j][0] = (
GL
ubyte) c; checkImage[i][j][1] = (
GL
ubyte) c; checkImage[i][j][2] = (
GL
ubyte) c; checkImage[i][j][3] = (
GL
ubyte) 255; } } } void init(void) {
gl
ClearColor (0.0, 0.0, 0.0, 0.0);
gl
ShadeModel(
GL
_FLAT);
gl
Enable(
GL
_DEPTH_TEST); makeCheckImage();
gl
PixelStorei(
GL
_UNPACK_ALIGNMENT, 1); #ifdef
GL
_VERSION_1_1
gl
GenTextures(1, &texName);
gl
BindTexture(
GL
_TEXTURE_2D, texName); #endif
gl
TexParameteri(
GL
_TEXTURE_2D,
GL
_TEXTURE_WRAP_S,
GL
_REPEAT);
gl
TexParameteri(
GL
_TEXTURE_2D,
GL
_TEXTURE_WRAP_T,
GL
_REPEAT);
gl
TexParameteri(
GL
_TEXTURE_2D,
GL
_TEXTURE_MAG_FILTER,
GL
_NEAREST);
gl
TexParameteri(
GL
_TEXTURE_2D,
GL
_TEXTURE_MIN_FILTER,
GL
_NEAREST); #ifdef
GL
_VERSION_1_1
gl
TexImage2D(
GL
_TEXTURE_2D, 0,
GL
_RGBA, checkImageWidth, checkImageHeight, 0,
GL
_RGBA,
GL
_UNSIGNED_BYTE, checkImage); #else
gl
TexImage2D(
GL
_TEXTURE_2D, 0, 4, checkImageWidth, checkImageHeight, 0,
GL
_RGBA,
GL
_UNSIGNED_BYTE, checkImage); #endif } void display(void) {
gl
Clear(
GL
_COLOR_BUFFER_BIT |
GL
_DEPTH_BUFFER_BIT);
gl
Enable(
GL
_TEXTURE_2D);
gl
TexEnvf(
GL
_TEXTURE_ENV,
GL
_TEXTURE_ENV_MODE,
GL
_DECAL); #ifdef
GL
_VERSION_1_1
gl
BindTexture(
GL
_TEXTURE_2D, texName); #endif
gl
Begin(
GL
_QUADS); ○1
gl
TexCoord2f(0.0, 0.0);
gl
Vertex3f(-2.0, -1.0, 0.0); ○2
gl
TexCoord2f(0.0, 1.0);
gl
Vertex3f(-2.0, 1.0, 0.0); ○3
gl
TexCoord2f(1.0, 1.0);
gl
Vertex3f(0.0, 1.0, 0.0); ○4
gl
TexCoord2f(1.0, 0.0);
gl
Vertex3f(0.0, -1.0, 0.0);
gl
TexCoord2f(0.0, 0.0);
gl
Vertex3f(1.0, -1.0, 0.0);
gl
TexCoord2f(0.0, 1.0);
gl
Vertex3f(1.0, 1.0, 0.0);
gl
TexCoord2f(1.0, 1.0);
gl
Vertex3f(2.41421, 1.0, -1.41421);
gl
TexCoord2f(1.0, 0.0);
gl
Vertex3f(2.41421, -1.0, -1.41421);
gl
End();
gl
Flush();
gl
Disable(
GL
_TEXTURE_2D); } void reshape(int w, int h) {
gl
Viewport(0, 0, (
GL
sizei) w, (
GL
sizei) h);
gl
MatrixMode(
GL
_PROJECTION);
gl
LoadIdentity();
gl
uPerspective(60.0, (
GL
float) w/(
GL
float) h, 1.0, 30.0);
gl
MatrixMode(
GL
_MODELVIEW);
gl
LoadIdentity();
gl
Translatef(0.0, 0.0, -3.6); } void keyboard (unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; default: break; } } int main(int argc, char** argv) {
gl
utInit(&argc, argv);
gl
utInitDisplayMode(
GL
UT_SIN
GL
E |
GL
UT_RGB |
GL
UT_DEPTH);
gl
utInitWindowSize(250, 250);
gl
utInitWindowPosition(100, 100);
gl
utCreateWindow(argv[0]); init();
gl
utDisplayFunc(display);
gl
utReshapeFunc(reshape);
gl
utKeyboardFunc(keyboard);
gl
utMainLoop(); return 0; } Deferred shading 原理
O
open
GL
习题讲解
【例3-2】使用
gl
ut库函数绘制一个真实感的球。 # include <
GL
/
gl
ut.h > /* 初始化材料属性、光源属性、光照模型,打开深度缓冲区等 */ void init(void) {
GL
float
light
_position [ ] = { 1.0, 1.0, 1.0, 0.0 };
gl
ClearColor ( 0.0, 0.0, 1.0, 0.0 );//设置背景色为蓝色
gl
ShadeModel (
GL
_SMOOTH );
gl
Light
fv (
GL
_
LIGHT
0,
GL
_POSITION,
light
_position);
gl
Enable (
GL
_
LIGHT
ING);
gl
Enable (
GL
_
LIGHT
0);
gl
Enable (
GL
_DEPTH_TEST); } /*调用
GL
UT函数,绘制一个球*/ void display ( void ) {
gl
Clear (
GL
_COLOR_BUFFER_BIT |
GL
_DEPTH_BUFFER_BIT);
gl
utSolidSphere (1.0, 40, 50); //半径为1,40条纬线,50条经线
gl
Flush (); } /* 定义
GL
UT的reshape函数,w、h分别是输出图形的窗口的宽和高*/ void reshape (int w, int h) {
gl
Viewport (0, 0, (
GL
sizei) w, (
GL
sizei) h);
gl
MatrixMode (
GL
_PROJECTION);
gl
LoadIdentity ( ); if (w <= h)
gl
Ortho (-1.5, 1.5, -1.5 * (
GL
float ) h / (
GL
float ) w,1.5 * (
GL
float ) h / (
GL
float ) w, -10.0, 10.0 ); else
gl
Ortho (-1.5 * (
GL
float ) w / (
GL
float ) h,1.5 * (
GL
float ) w / (
GL
float ) h, -1.5, 1.5, -10.0, 10.0);
gl
MatrixMode (
GL
_MODELVIEW );
gl
LoadIdentity ( ) ; } int main(int argc, char** argv) {
gl
utInit (&argc, argv); //
GL
UT环境初始化
gl
utInitDisplayMode (
GL
UT_SIN
GL
E |
GL
UT_RGB |
GL
UT_DEPTH); // 显示模式初始化
gl
utInitWindowSize (300, 300); // 定义窗口大小
gl
utInitWindowPosition (100, 100); // 定义窗口位置
gl
utCreateWindow ( argv [ 0 ] ); // 显示窗口,窗口标题为执行函数名 init( ); // 调用init函数
gl
utDisplayFunc ( display ); // 注册
Open
GL
绘图函数(一种的特殊调用方式,下同)
gl
utReshapeFunc ( reshape ); // 注册窗口大小改变时的响应函数
gl
utMainLoop( ); // 进入
GL
UT消息循环,开始执行程序 return 0; }
open
GL
程序
#include
#include
#include<
gl
/
gl
aux.h> #include<
GL
/
gl
ut.h> #include"../../wgGameLib03/dms/FileImage.h" #include"../../wgGraphLib/GraphElemenfs.h"
GL
int iWidth, iHeight, iGomponents.h;
GL
enum eFormat;
GL
float xRot,yRot;
GL
float no
Light
[4]={0.0f,0.0f,0.0f,1.0f};
GL
float ambient
Light
[4]={0.3f,0.3f,0.3f,0.2f};
GL
float bright
Light
[4]={1.0f,1.0f,1.0f,0.3f}; static
GL
float
light
Pos[]={5.0f,5.0f,5.0f,1.0f}; void Init() {
gl
ClearColor(0.0f,0.0f,0.0f,1.0f);
gl
CullFace(
GL
_BACK);
gl
FrontFace(
GL
_CCW);
gl
Enable(
GL
_CULL_FACE);
gl
Enable(
GL
_DEPTH_TEST);
gl
Enable(
GL
_
LIGHT
ING);
gl
LigntModelfv(
GL
_
LIGHT
_MODEL_AMBIENT,no
Light
);
gl
Light
fv(
GL
_
LIGHT
O,
GL
_AMBIENT,ambient
Light
);
gl
Light
fv(
GL
_
LIGHT
O,
GL
_DIFFUSE,diffuse
Light
);
gl
Light
fv(
GL
_
LIGHT
O,
GL
_SPECULAR,bright
Light
);
gl
Light
fv(
GL
_
LIGHT
O,
GL
_POSITION,
light
Pos);
gl
Enable(
GL
_COLOR_MATERIAL);
gl
ColorMateriali(
GL
_FRONT,
GL
_AMBIENT_AND_DIFFUSE);
gl
Materialfv(
GL
_FRONT,
GL
_SPECULAR,bright
Light
);
gl
Materiali(
GL
_FRONT,
GL
_SHININESS,30);
gl
PixelStorei(
GL
_UNPACK_ALIGHMENT,1); dms::FileImage image("stone.jpg"); if(image.data()) {
gl
TexImage2D(
GL
_TEXTURE_2D,0,
GL
_RGBA,image.width(),image.height(),0,
GL
_RGBA,
GL
_UNSIGNED_BYTE,image.data()); //
gl
TexImage2D(
GL
_TEXTURE_2D,0,iComponents,iWidth,iHeight,0,eFormat,
GL
_UNSIGNED_BYTE,pImage); free(image.data()); } float colorl[4]={1.0,0.1,0.1,1.0};
gl
TexParameteri(
GL
_TEXTURE_2D,
GL
_TEXTURE_MIN_FILTER,
GL
_LINEAR);
gl
TexParameteri(
GL
_TEXTURE_2D,
GL
_TEXTURE_MAG_FILTER,
GL
_LINEAR);
gl
TexParameteri(
GL
_TEXTURE_2D,
GL
_TEXTURE_WRAP_S,
GL
_CLAMP);
gl
TexParameteri(
GL
_TEXTURE_2D,
GL
_TEXTURE_WRAP_T,
GL
_CLAMP);
gl
TexEnvi(
GL
_TEXTURE_ENV,
GL
_TEXTURE_ENV_MODE,
GL
_BLEND);
gl
Enable(
GL
_TEXTURE_2D); } void display() {
gl
Clear(
GL
_COLOR_BUFFER_BIT |
GL
_DEPTH_BUFFER_BIT); float vertices[5][3]={{0.0f,0.8f,0.0f}, {-0.50f,0.0f,-0.50f}, {0.5f,0.0f,-0.5f}, {0.50f,0.0f,0.50f}}; float normal[3];
gl
PushMatrix();
gl
Translatef(0.0f,-0.3f,-4.0f); if(xRot>360.5f) { xRot=0.0f; } if(yRot>360.5f) { yRot=0.0f; }
gl
Botatef(xROt,1.0f,0.0f,0.0f);
gl
Rotatef(yRot,0.0f,1.0f,0.0f); xRot+=0.5f; yRot+=0.5f;
gl
Begin(
GL
_TRIAN
GL
ES);
gl
Color3f(1.0f,0.0f,0.0f);
gl
Normal3f(0.0f,-1.0f,0.0f);
gl
TexCoord2f(0.0f,1.0f);
gl
Vertex3fv(vertices[1]);
gl
TexCoord2f(1.0f,0.0f);
gl
Vertex3fv(vertices[2]);
gl
TexCoord2f(0.0f,1.0f);
gl
Vertex3fv(vertices[4]);
gl
TexCoord2f(1.0f,0.0f);
gl
Vertex3fv(vertices[4]);
gl
TexCoord2f(0.0f,0.0f);
gl
Vertex3fv(vertices[3]);
gl
TexCoord2f(0.0f,1.0f);
gl
Vertex3fv(vertices[1]);
gl
Color3f(0.0f,0.0f,1.0f); wgGetNormal(vertices[1],vertices[3],vertices[0],normal);
gl
Normal3f(normal);
gl
TexCoord2f(0.0f,0.0f);
gl
Vertex3fv(vertices[1]);
gl
TexCoord2f(1.0f,0.0f);
gl
Vertex3fv(vertices[3]);
gl
TexCoord2f(0.5f,0.5f);
gl
Vertex3fv(vertices[0]);
gl
Color3f(0.0f,1.0f,1.0f); wgGetNormal(vertices[0],vertices[4],vertices[2],normal);
gl
Normal3f(normal);
gl
TexCoord2f(0.5f,0.5f);
gl
Vertex3fv(vertices[0]);
gl
TexCoord2f(0.0f,0.0f);
gl
Vertex3fv(vertices[4]);
gl
TexCoord2f(1.0f,0.0f);
gl
Vertex3fv(vertices[2]);
gl
Color3f(1.0f,0.0f,1.0f); wgGetNormal(vertices[0],vertices[2],vertices[1],normal);
gl
Normal3f(normal);
gl
TexCoord2f(0.5f,0.5f);
gl
Vertex3fv(vertices[0]);
gl
TexCoord2f(0.0f,0.0f);
gl
Vertex3fv(vertices[2]);
gl
TexCoord2f(1.0f,0.0f);
gl
Vertex3fv(vertices[1]);
gl
End();
gl
PopMatrix();
gl
utSwapBuffers(); } voidReshape(
GL
sizei w,
GL
sizei h) { if(h==0) h=1;
gl
Viewport(0,0,w,h); float fAspect=(
GL
float)w/(
GL
float)h;
gl
MatrixMade(
GL
_PROJECTION);
gl
LoadIdentity();
gl
utPostRedisplay(); } void TimerFunc(int value) {
gl
utPostRedisplay();
gl
utTimerFunc(60,TimerFunc,1); } int main(int args,char *argv[]) {
gl
utInit(&args,argv);
gl
utInitDisplayMode(
GL
UT_RGB |
GL
UT_DOUBLE |
GL
UT_DEPTH);
gl
utInitWindowSize(512,512);
gl
utCreatWindow("example");
gl
utDisplayFunc(display);
gl
utReshapeFunc(Reshape); Init();
gl
utTimerFunc(50,TimerFunc,1); //tTexture
gl
utMainLoop(); return 0; }
OPEN
GL
三维混合图形
gl
Enable(
GL
_
LIGHT
ING);//打开光照
gl
Enable(
GL
_
LIGHT
0);//打开第一个光源
gl
Enable(
GL
_DEPTH_TEST);//启动深度探测
游戏开发
8,305
社区成员
23,682
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章