OpenGL의 풀 테이블 위에 '스포트라이트'를 만들려고합니다. 이것은 매우 간단해야하지만, 뭔가 잘못되고, 나는 무엇을 해결할 수 없습니다.OpenGL Spotlights
클래스 'PoolLight'를 사용하고 있습니다. 클래스 라이트를 유지하는 클래스로 사용하고 있습니다. 여기입니다 : 내 장면이 균일하게 '의 일종으로 점등 중앙 스포트라이트를 제외하고 모두 해제하더라도, 그러나
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glPointSize(6);
//Lighting
middleSpotlight = PoolLight(GL_LIGHT0, GL_DIFFUSE, .3, .3, 0.15, false, 0, 0, 50);
middleSpotlight.setSpotlight(60, 1, 0, 0, -1);
upperSpotlight = PoolLight(GL_LIGHT1, GL_DIFFUSE, .3, .3, 0.15, false, 0, 45, 50);
upperSpotlight.setSpotlight(60, 1, 0, 0, -1);
lowerSpotlight = PoolLight(GL_LIGHT2, GL_DIFFUSE, .3, .3, 0.15, false, 0, -45, 50);
lowerSpotlight.setSpotlight(60, 1, 0, 0, -1);
:
#include "PoolLight.h"
#include "Glut/glut.h"
#include "GL/gl.h"
#include "GL/glu.h"
PoolLight::PoolLight() {
}
PoolLight::PoolLight(GLenum lightNumber, GLenum lightType, float red, float green, float blue, bool distant, float posX, float posY, float posZ)
{
this->lightNumber = lightNumber;
this->lightType = lightType;
color[0] = red; color[1] = green; color[2] = blue; color[3] = 1;
position[0] = posX; position[1] = posY; position[2] = posZ; position[3] = (int) (!distant);
glLightfv(lightNumber, lightType, color);
glLightfv(lightNumber, GL_POSITION, position);
enabled(true);
}
PoolLight::~PoolLight(void)
{
}
void PoolLight::setSpotlight(float angle, float attenuation, float dirX, float dirY, float dirZ) {
glLightf(lightNumber, GL_SPOT_EXPONENT, angle);
glLightf(lightNumber, GL_CONSTANT_ATTENUATION, attenuation);
glLightf(lightNumber, GL_LINEAR_ATTENUATION, 0.0f);
glLightf(lightNumber, GL_QUADRATIC_ATTENUATION, 0.0f);
spotDirection[0] = dirX; spotDirection[1] = dirY; spotDirection[2] = dirZ;
glLightfv(lightNumber, GL_SPOT_DIRECTION, spotDirection);
glLightf(lightNumber, GL_SPOT_CUTOFF, 60);
}
void PoolLight::enabled(bool enabled) {
if (enabled) glEnable(lightNumber);
else glDisable(lightNumber);
}
void PoolLight::reposition() {
glLightfv(lightNumber, GL_POSITION, position);
}
그리고 디스플레이에
:: 초기화,이 코드를 담요 '조명.나는 분명히 뭔가 빠져있는 것처럼 느껴진다.하지만 나는 무엇을 볼 수 없다.
각도가 라디안 단위로 지정되지 않았습니까? '60'을 각도로 사용하면도를 사용하는 것처럼 보입니다. – ChrisF
나는 그것을 (60.0 * (3.1415/180))로 바꾸었지만 아무 소용이 없다. – Xenoprimate
흠, 지금은 다른 생각을 할 수 없습니다 - 죄송합니다. – ChrisF