作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我创建了一个小应用程序来显示单个粒子:
当我围绕场景旋转时,光照发生变化,粒子几乎变得不可见:
是否可以在整个旋转过程中强制设置光照?
相关代码:
// init
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glAccum(GL_RETURN, 0.95f);
glClear(GL_ACCUM_BUFFER_BIT);
glClearAccum(0.0f, 0.0f, 0.0f, 0.0f);
glDisable(GL_CULL_FACE);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
float quadratic[3] = { 0.0, 0.0, 0.01337f };
float linear[3] = { 0.0, 1, 0.0 };
float constant[3] = { 0.01, 0.0, 0.0 };
glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, quadratic);
float maxSize = 0.0f;
glGetFloatv( GL_POINT_SIZE_MAX_ARB, &maxSize );
glPointSize( maxSize );
glPointParameterfARB( GL_POINT_SIZE_MAX_ARB, maxSize );
glPointParameterfARB( GL_POINT_SIZE_MIN_ARB, 1.0f );
QImage b("particle.bmp");
QImage t;
t = QGLWidget::convertToGLFormat(b);
glGenTextures(1, texture);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvf(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
绘制函数:
// draw function:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glAccum(GL_RETURN, 0.95f);
glClear(GL_ACCUM_BUFFER_BIT);
glDepthMask(GL_FALSE);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glEnable(GL_LIGHTING);
glEnable(GL_POINT_SPRITE_ARB);
glColor4f(1.0f, 1.0f, 0.1f, 0.7f);
glBegin(GL_POINTS);
// Loop over all particles and draw the gl points separately:
glVertex3f(x, y, z);
glEnd();
glDisable(GL_POINT_SPRITE_ARB);
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glDisable(GL_BLEND);
glAccum(GL_ACCUM, 0.5f);
万一你想自己测试here's完整的代码。我使用 libqglviewer 进行相机旋转。
最佳答案
关闭GL_LIGHTING
。我不确定你为什么要戴上它。
关于c++ - 旋转时照明的 GL_POINT_SPRITE_ARB(广告牌)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9191592/
我正在学习一些 OpenGL 基础知识,当我决定制作一个粒子系统时,我遇到了一些问题。当我尝试使用 GL_POINT_SPRITE 渲染 GL_POINT 时,它们不会显示在屏幕上,除非它们首先是渲染
我创建了一个小应用程序来显示单个粒子: 当我围绕场景旋转时,光照发生变化,粒子几乎变得不可见: 是否可以在整个旋转过程中强制设置光照? 相关代码: // init glClear(GL_COLOR_B
我是一名优秀的程序员,十分优秀!