- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想让这个房间有灯泡效果,但我不确定它有什么问题。截至目前,光线似乎只是照在球体的顶部,而圆锥体的侧面和墙壁都没有得到任何光线。我试着摆弄位置和方向,但没有任何效果。
#include <GLUT/glut.h>
#include <stdio.h>
#include <stdlib.h>
//Global variables
double sphere = 1, cone = 1, viewy = 2, viewx = -10, viewz = 5,headup = 5,headright = 5;
void myinit(){
glClearColor(0,0,0,1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,1,1,100);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
//glOrtho(-2,20,-2,20,-10,10);
}
void drawRoom(){
//floor
glBegin(GL_POLYGON);
glColor3f(1,1,1);
glVertex3f(0,0,0);
glVertex3f(0,10,0);
glVertex3f(10,10,0);
glVertex3f(10,0,0);
glEnd(
);
//wall
glBegin(GL_POLYGON);
glColor3f(0,0,1);
glVertex3f(0,10,0);
glVertex3f(0,10,10);
glVertex3f(10,10,10);
glVertex3f(10,10,0);
glEnd();
//wall2
glBegin(GL_POLYGON);
glColor3f(0,1,0);
glVertex3f(10,10,0);
glVertex3f(10,10,10);
glVertex3f(10,0,10);
glVertex3f(10,0,0);
glEnd();
}
void drawObjects(){
//draw cone
glShadeModel(GL_FLAT);
glColor3f(1,0,1);
glTranslatef(2,2,0);
glutSolidCone(cone,5,10,2);
//draw sphere
glShadeModel(GL_SMOOTH);
glTranslatef(5,5,0);
glColor3f(1,0,0);
glutSolidSphere(sphere,500,500);
}
void move(unsigned char key, int x, int y){
switch(key){
case 'y':
viewy++;
glutPostRedisplay();
break;
case 'x':
viewx++;
glutPostRedisplay();
break;
case 'z':
viewz++;
glutPostRedisplay();
break;
case 'Z':
viewz--;
glutPostRedisplay();
glutPostRedisplay();
break;
//moves head
case 'd':
headup--;
headright--;
glutPostRedisplay();
break;
case 'a':
headup++;
headright++;
glutPostRedisplay();
break;
}
}
void display(){
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(viewx,viewy,viewz,headup,headright,5,0,0,1);
glClear(GL_COLOR_BUFFER_BIT);
drawRoom();
GLfloat light_position[] = {5.0,5.0,10.0,0.0};
GLfloat light_direction[] = {-5,-5,-5};
GLfloat amb[] = {0,0,0,1};
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION,light_direction);
glLightfv(GL_LIGHT0, GL_AMBIENT,amb);
drawObjects();
glutSwapBuffers();
glFlush();
}
int main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("Room");
myinit();
glutDisplayFunc(display);
glutKeyboardFunc(move);
//glutMotionFunc(moveHead);
glutMainLoop();
return 0;
}
最佳答案
第一:你必须提供法线。
第二:OpenGL 固定函数管线只评估顶点处的光照,然后进行重心颜色插值。内部某处有光源的盒子的角接收到的光最少。对于仅由 6 个四边形组成的盒子,您不会得到很好的衰减,而只会得到光线昏暗的墙壁。您要么必须使用片段着色器来实现每个片段照明(推荐),要么将您的四边形 segmentation 为形成墙的合理数量的较小四边形,以便有足够的插值采样点,其中照明被评估。
关于c - OpenGL 中的光照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482418/
我正在使用 JOGL 库开发一些 OpenGL 游戏。 当我定期绘制物体时,例如直接在显示方法中使用GL_QUADS,场景照明出现在对象上。 但是,当我在 init 方法中准备对象并在显示列表中使用
我正在写一个非常小的游戏,在这个游戏中玩家拿着手电筒。 游戏发生的世界是一个小房子。 问题是我的墙是通过绘制多边形绘制的,一个多边形就是一面墙。因此,当我将光照射到墙上时,它不会亮起,只有当光照射到其
我只是在编写一个简单的程序来使用顶点数组对象绘制体素。当我运行程序时,我无法使照明正常工作,它看起来与未启用灯时一样。这是代码片段。显示功能 void GraphicVoxel::display()
我和我的团队刚刚将我们的游戏从 java2d 移植到 LWJGL,现在想要添加照明。我们到底想添加什么: 发光且可移动的元素/实体。 静态照明 我们已经用谷歌搜索了一段时间,但有点迷失,因为我们不知道
所以我有一个 3D 对象,我用以下光线绘制: GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 0.9}; /* White light. */ GLflo
我试图找到加载到 opengl 程序中的任意对象的 vector 归一化。我正在尝试计算所有顶点的法线。我收集到的是,我需要首先计算面的法线,然后找到顶点法线的平均值。 当我运行程序时,某些对象被正确
我正在尝试在 Vulkan 着色器中为单个光源实现 Blinn-Phong 着色,但我得到的结果不是我所期望的。 输出如下所示: 灯光位置应在相机右侧的后面,这在图里上正确表示,但在圆圈上却没有。我不
我已经有了这个不再那么小的基于图 block 的游戏,这是我的第一个真正的 OpenGL 项目。我想将每个图 block 渲染为 3D 对象。因此,首先我创建了一些对象,例如立方体和球体,为它们提供了
这是我第一次尝试创建一个基本的灯光系统,该系统使用顶部有白色圆圈的黑色纹理。我阅读了有关该问题的各种帖子,但我只是不知道我做错了什么。 我想要的是环境是黑暗的,光线是白色的,但是将 spritebat
我是 GLES 2.0 的新手。这真的让我很紧张,因为 OpenGL ES 1 II 只是设置了 GL_LIGHTNING1,然后设置了光照。在 GLES 2.0 中它不起作用。实际上整个屏幕都是黑色
我想问一个关于我在 OpenGL 中的光照效果的问题。 我正在尝试添加照明,但我认为这不是很好,而且我看到一些 2D 照明图片比我的好得多。 问题:我做了一个聚光灯,但我希望它能随着光照范围变小而变暗
我又回到了 Unity。我曾经使用 Unity 4 来创建我的关卡,在那里我可以从我的枪中射出实时灯光。我也使用 Probuilder 来创建我的场景,并且有很多汽车和巡逻 guard 。而且很顺利。
图像素描特效 图像素描特效主要经过以下几个步骤: 调用cv.cvtcolor()函数将彩色图像灰度化处理; 通过cv.gaussianblur()函数实现高斯滤波降噪; 边缘检测采用canny算
我正在尝试在片段着色器中实现 Oren-Nayar 光照,如图所示 here . 但是,我在地形上得到了一些奇怪的光照效果,如下所示。 我目前正在向着色器发送“视角方向”制服作为相机的“前” vect
我有一张包含很多 Sprite 的 map 。我可以向具有漫反射阴影的 Sprite 添加 Material ,而不是添加大量灯光。但这不会给我想要的结果。并且性能很重。 例子 在第一张图片中,您可以
我是一名优秀的程序员,十分优秀!