Refactored Ray
This commit is contained in:
parent
c883f50f90
commit
d1c909ca57
4 changed files with 32 additions and 26 deletions
|
@ -87,6 +87,24 @@ class MathUtil {
|
|||
float d;
|
||||
};
|
||||
|
||||
class Ray {
|
||||
public:
|
||||
Ray() : vertex(vmml::vec3f::ZERO), dir(vmml::vec3f::ZERO) {}
|
||||
Ray(const vmml::vec3f &v, const vmml::vec3f &d) : vertex(v), dir(d) {}
|
||||
|
||||
const vmml::vec3f& getVertex() const {
|
||||
return vertex;
|
||||
}
|
||||
|
||||
const vmml::vec3f& getDirection() const {
|
||||
return dir;
|
||||
}
|
||||
|
||||
private:
|
||||
vmml::vec3f vertex;
|
||||
vmml::vec3f dir;
|
||||
};
|
||||
|
||||
static vmml::mat4f perspective(float fovy, float aspect, float zNear);
|
||||
|
||||
private:
|
||||
|
|
|
@ -62,14 +62,14 @@ void Renderer::renderShadowVolume(const ShadowVolume &v) {
|
|||
if(!v.isVisible())
|
||||
return;
|
||||
|
||||
glVertex3fv(v.getVertex(2).array);
|
||||
glVertex3fv(v.getVertex(1).array);
|
||||
glVertex3fv(v.getVertex(0).array);
|
||||
glVertex3fv(v.getRay(2).getVertex().array);
|
||||
glVertex3fv(v.getRay(1).getVertex().array);
|
||||
glVertex3fv(v.getRay(0).getVertex().array);
|
||||
|
||||
for(int i = 0; i < 3; ++i) {
|
||||
const vmml::vec3f &p1 = v.getVertex(i), &p2 = v.getVertex((i+1)%3);
|
||||
vmml::vec4f dir1 = vmml::vec4f(v.getDirection(i), 0);
|
||||
vmml::vec4f dir2 = vmml::vec4f(v.getDirection((i+1)%3), 0);
|
||||
const vmml::vec3f &p1 = v.getRay(i).getVertex(), &p2 = v.getRay((i+1)%3).getVertex();
|
||||
vmml::vec4f dir1 = vmml::vec4f(v.getRay(i).getDirection(), 0);
|
||||
vmml::vec4f dir2 = vmml::vec4f(v.getRay((i+1)%3).getDirection(), 0);
|
||||
|
||||
glVertex3fv(p1.array);
|
||||
glVertex3fv(p2.array);
|
||||
|
@ -80,9 +80,9 @@ void Renderer::renderShadowVolume(const ShadowVolume &v) {
|
|||
glVertex4fv(dir2.array);
|
||||
}
|
||||
|
||||
glVertex4fv(vmml::vec4f(v.getDirection(0), 0).array);
|
||||
glVertex4fv(vmml::vec4f(v.getDirection(1), 0).array);
|
||||
glVertex4fv(vmml::vec4f(v.getDirection(2), 0).array);
|
||||
glVertex4fv(vmml::vec4f(v.getRay(0).getDirection(), 0).array);
|
||||
glVertex4fv(vmml::vec4f(v.getRay(1).getDirection(), 0).array);
|
||||
glVertex4fv(vmml::vec4f(v.getRay(2).getDirection(), 0).array);
|
||||
}
|
||||
|
||||
void Renderer::useTexture(unsigned texture) {
|
||||
|
|
|
@ -27,10 +27,6 @@ namespace Zoom {
|
|||
ShadowVolume::ShadowVolume(const Triangle &t, const vmml::vec3f &lightPos) : visible(true) {
|
||||
MathUtil::Plane trianglePlane(t);
|
||||
|
||||
for(int i = 0; i < 3; ++i) {
|
||||
rays[i].p = t.getVertex(i);
|
||||
}
|
||||
|
||||
if(!trianglePlane.isBehind(lightPos)) {
|
||||
visible = false;
|
||||
|
||||
|
@ -38,7 +34,7 @@ ShadowVolume::ShadowVolume(const Triangle &t, const vmml::vec3f &lightPos) : vis
|
|||
}
|
||||
|
||||
for(int i = 0; i < 3; ++i) {
|
||||
rays[i].dir = rays[i].p - lightPos;
|
||||
rays[i] = MathUtil::Ray(t.getVertex(i), t.getVertex(i) - lightPos);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,8 +20,7 @@
|
|||
#ifndef ZOOM_SHADOWVOLUME_H_
|
||||
#define ZOOM_SHADOWVOLUME_H_
|
||||
|
||||
#include <vmmlib/vector.hpp>
|
||||
#include <vmmlib/matrix.hpp>
|
||||
#include "MathUtil.h"
|
||||
|
||||
namespace Zoom {
|
||||
|
||||
|
@ -32,12 +31,8 @@ class ShadowVolume {
|
|||
ShadowVolume(const Triangle &t, const vmml::vec3f &lightPos);
|
||||
virtual ~ShadowVolume() {}
|
||||
|
||||
const vmml::vec3f& getVertex(int i) const {
|
||||
return rays[i].p;
|
||||
}
|
||||
|
||||
const vmml::vec3f& getDirection(int i) const {
|
||||
return rays[i].dir;
|
||||
const MathUtil::Ray& getRay(int i) const {
|
||||
return rays[i];
|
||||
}
|
||||
|
||||
bool isVisible() const {
|
||||
|
@ -47,10 +42,7 @@ class ShadowVolume {
|
|||
private:
|
||||
bool visible;
|
||||
|
||||
struct Ray {
|
||||
vmml::vec3f p;
|
||||
vmml::vec3f dir;
|
||||
} rays[3];
|
||||
MathUtil::Ray rays[3];
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Reference in a new issue