- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在开发一个 openframeworks 项目,该项目有一系列立方体,每个立方体内部都由点光源照亮。降低立方体的透明度以让光线通过。我已验证灯光设置为 0,0,0(即立方体的中心)。
理论上,点光源应该均匀地照亮立方体的每一面。然而,立方体的一侧明显较暗,而另一侧较浅。
所以,我想知道是否有一个我不知道的全局光照参数需要以某种方式关闭。我的代码如下:
立方体.cpp
#include "cube.h"
cube::cube(float _w, float _h, float _d, float _cubeHue)
{
w = _w;
h = _h;
d = _d;
cubeHue = _cubeHue;
GLfloat vdata[8][3] = {
{-w, -h, -d}, {-w, h, -d},
{w, h, -d}, {w, -h, -d},
{-w, -h, d}, {w, -h, d},
{-w, h, d}, {w, h, d}
};
GLint indices[6][4] = {
{3, 2, 1, 0},
{3, 5, 4, 0},
{3, 5, 7, 2},
{0, 4, 6, 1},
{1, 2, 7, 6},
{5, 4, 6, 7}
};
cubeColor = ofColor();
cubeColor.setHsb(cubeHue,ofRandom(500,255),ofRandom(100,255), 150);
for (int i=0; i<8; ++i)
{
mesh.addVertex(ofVec3f( vdata[i][0], vdata[i][1], vdata[i][2] ));
mesh.addColor(cubeColor);
for (int i=0; i<6; ++i)
{
mesh.addIndex(indices[i][0]);
mesh.addIndex(indices[i][1]);
mesh.addIndex(indices[i][2]);
mesh.addIndex(indices[i][3]);
}
}
ofEnableLighting();
pointLight.setPointLight();
pointLight.setAttenuation(0.5f);
pointLight.setPosition(ofVec3f(0,0,0));
myVbo.setMesh(mesh, GL_STATIC_DRAW);
}
void cube::draw()
{
pointLight.enable();
myVbo.drawElements(GL_QUADS, 24);
mesh.drawWireframe();
pointLight.disable();
}
void cube::update()
{
}
void cube::setLocation(float _x, float _y, float _z)
{
x = _x;
y = _y;
z = _z;
}
测试应用.cpp
#include "testApp.h"
//--------------------------------------------------------------
void testApp::setup()
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
ofBackground(33, 33, 33);
ofSetFrameRate(24);
camera.setNearClip(0.1);
camera.setFarClip(1900);
camera.setPosition(ofVec3f(0,0,0));
camAngle = 0;
camX = 400;
camY = 0;
camZ = 400;
cube1 = new cube(50,50,50,75);
cube2 = new cube(50,50,50,220);
cube3 = new cube(50,50,50,80);
cube4 = new cube(50,50,50,190);
cube5 = new cube(50,50,50,120);
rotateAngle[0] = 0.0f;
rotateAngle[1] = 0.0f;
rotateAngle[2] = 0.0f;
rotateAngle[3] = 0.0f;
ofFloatColor diffuseColor;
diffuseColor.set(1.0,1.0,1.0);
}
//--------------------------------------------------------------
void testApp::update()
{
camAngle += 0.02f;
if (camAngle >= 360)
{
camAngle = 0;
}
camX = 800 * sin(camAngle);
camZ = 800 * cos(camAngle);
camera.lookAt(ofVec3f(0, 0, 0));
}
//--------------------------------------------------------------
void testApp::draw()
{
camera.begin();
camera.setPosition(ofVec3f(camX, camY, camZ));
rotateAngle[0] += 1.0f;
rotateAngle[1] += 0.5f;
rotateAngle[2] += 0.75f;
rotateAngle[3] += 1.5f;
if (rotateAngle[0] > 359)
{
rotateAngle[0] = 0.0f;
}
if (rotateAngle[1] > 359)
{
rotateAngle[1] = 0.0f;
}
if (rotateAngle[2] > 359)
{
rotateAngle[2] = 0.0f;
}
if (rotateAngle[3] > 359)
{
rotateAngle[3] = 0.0f;
}
ofPushMatrix();
ofTranslate(20,20,-30);
cube1->draw();
ofPopMatrix();
ofPushMatrix();
ofTranslate(100,-80,30);
cube2->draw();
ofPopMatrix();
ofPushMatrix();
ofTranslate(150,80,100);
cube3->draw();
ofPopMatrix();
ofPushMatrix();
ofTranslate(-150,180,-10);
cube4->draw();
ofPopMatrix();
ofPushMatrix();
ofTranslate(250,-180,-60);
cube5->draw();
ofPopMatrix();
}
最佳答案
我相信这是因为你所有的灯都是在原点创建的。
当您ofTranslate
时,当您渲染它们时,这些光不再位于立方体内部(它们位于“原始原点”)。
为什么不使用立方体的位置成员并将平移移动到立方体中,以便相应地平移光源?
关于c++ - Openframeworks 全局照明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22050234/
我正在练习我的 Javascript,所以我制作了一个跟随鼠标的功能。我成功了,但现在我有了一个新想法,但我不确定是否可行。 有没有办法让“视觉球体”跟随鼠标,以便该区域中的所有内容都可见?。有点像使
对my question的回答表明 DOT3 光照可以帮助 OpenGL ES 渲染,但我很难找到 DOT3 光照的合适定义。 编辑 1 非常感谢 iPhone 相关信息。 最佳答案 DOT3 照明通
所以我一直在研究照明,为了阴影贴图的目的,我根据半径而不是三个衰减因子(常数、线性和二次)进行光衰减,而且,嗯......它看起来不太好靠近边缘。 /image/H680a.png 它切断得非常快,着
我已经问过这个问题了,但没有得到答案。顺便说一句,我发现了一些新东西。我想显示由 Solid Works 导出的 WRL 文件的 3D 模型。该文件包含三角形的顶点,我用 glBegin(GL_TRI
我在我的 JOGL 项目中添加了一个光源,当物体静止时,它似乎工作得很好,当我移动相机时,它随着它旋转而逐渐变暗,这是我所期望的,但一旦它旋转 90 度屏幕完全黑了,有人知道这是为什么吗?另一侧是否需
我正在尝试使用 iPhone LED 执行渐进式照明。为此,我尝试使用 setTorchModeOnWithLevel 方法, float 值定期增加,从 0.1 到 AVCaptureMaxAvai
我有一个我无法解决的问题。我刚刚在我的项目中添加了一个点光源,它使纹理完全变黑。我不知道为什么。 我认为这可能是法线没有正确更新,也可能是 s.x、s.y 和 s.z 的计算。 如果有人有时间看一下并
我有一张碰撞图,有些地方我想成为光源。光源提供的光实际上是我可以看到地面的形状。现在看起来像这样: 所以光线穿过墙壁。我想让它看起来像这样: (我用深黄色标记了与墙壁的碰撞) 因此光线在遇到墙壁时停止
我正在阅读 opengl.org 中的以下 Phong 照明着色器: Phong Illumination in Opengl.org 顶点和片段着色器如下: 顶点着色器: varying vec3
我读过的几乎所有文章和书籍都指出最终颜色的构成是:finalColor = ambientColor + lambertianTerm * diffuseColor (= material color
我一直在尝试检测移动的车辆。但是由于云的不同光照条件(不是云的阴影,只是照明)背景减法失败。 我已经在这里上传了我的输入视频 --> Youtube (30secs) 这是我使用 opencv 中可用
我只想点亮键盘上的一个键 (Logitech G910),同时设置鼠标颜色(罗技G303)。 在键盘上设置一个键可以正常工作,但是如果不同时将键盘上的所有键都设置为该颜色,我就无法设置鼠标的颜色。 我
我正在尝试获取 Logitech's own LED SDK使用我的 G502,但我不能。我使用的是 SDK 版本 8.82.7,这是目前最新的版本。我在 SO 或互联网的其他部分也找不到任何东西,所
因为我是着色器的完全菜鸟,所以我在尝试使用 2D 照明系统时遇到了一些问题,该系统基本上用 2D 黑色纹理覆盖屏幕,在亮区所在的位置有透明孔。 因为我只使用一个纹理,所以我想我必须在片段着色器中执行此
我试图使用此处的代码在 Laravel 中创建迁移。但不幸的是它会弹出一个像这里给出的错误。我看到了一些我手动创建表的答案..但这与迁移的整个想法非常相悖..不是吗? 迁移文件 2018_05_05_
我是一名优秀的程序员,十分优秀!