00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015
00016 #ifndef __RENDER_H__
00017 #define __RENDER_H__
00018
00019 #include "../../core/src/rendermodule.h"
00020 #include "../../core/src/camera.h"
00021
00022
00023 namespace VRUT
00024 {
00026 const int MODULE_VERSION = 1;
00027
00029 class _render: public RenderModule
00030 {
00031 protected:
00033 int var;
00035 Parameter::ParameterIdentificator varParamID;
00036
00038 virtual void processEvent(wxCommandEvent & evt)
00039 {
00041 RenderModule::processEvent(evt);
00042
00043 switch (evt.GetEventType())
00044 {
00046 case Event::EVT_PARAM_SET:
00047 UPDATE_PARAM_FROM_EVENT_INT(varParamID, var, evt);
00048 break;
00049 }
00050 }
00051
00052 public:
00054 _render(const MODULE_ID & _id, const wxString & _name, EventHandler * msgSink)
00055 : RenderModule(_id, _name, 0, msgSink),
00058 varParamID(_name, wxT("var"), _id)
00059 {
00061 REGISTER_PARAM_GUI_SLIDER(varParamID, wxT("100"), 0, 200);
00062 }
00064 virtual ~_render()
00065 {
00066 }
00067
00069 virtual wxString GetDesc() const
00070 {
00071 return wxT("This is my module");
00072 }
00076 virtual void Draw()
00077 {
00078 glClearColor(0.8, 0.3, 0.2, 0.0);
00079 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00080
00082 Scene * scene = GetSceneMgr()->GetScene(GetSceneID());
00083 if (scene)
00084 {
00087 BVH * bvh = scene->GetBVH();
00089 Camera * camera = (Camera *)scene->GetNode(cameraID);
00090 if (camera && bvh)
00091 {
00092 glMatrixMode(GL_PROJECTION);
00094 WriteLocker wrLock(*camera);
00096 scene->UpdateTransformation(camera->GetID());
00098 unsigned w, h;
00099 camera->GetWidthHeight(&w, &h);
00100 glViewport(0, 0, w, h);
00101 glLoadMatrixf(camera->GetProjectionMatrix()->_m);
00103 glMatrixMode(GL_MODELVIEW);
00104 glLoadMatrixf(camera->GetWorldTransMatrix()->Inverse()._m);
00105
00107 std::deque<const BVHNode *> queue;
00108 queue.push_back(bvh->GetRoot());
00109 VECTOR3 color(1,1,1);
00110 glDisable(GL_LIGHTING);
00111 glDisable(GL_TEXTURE_2D);
00112 while (queue.size())
00113 {
00114 const BVHNode * node = queue.front();
00115 queue.pop_front();
00116
00117 if (node)
00118 {
00119 glColor3fv(color._v);
00120 VECTOR3 v0(node->GetAABB()->MinBound);
00121 VECTOR3 v7(node->GetAABB()->MaxBound);
00122 VECTOR3 v1(v7.x, v0.y, v0.z);
00123 VECTOR3 v2(v0.x, v7.y, v0.z);
00124 VECTOR3 v3(v7.x, v7.y, v0.z);
00125 VECTOR3 v4(v0.x, v0.y, v7.z);
00126 VECTOR3 v5(v7.x, v0.y, v7.z);
00127 VECTOR3 v6(v0.x, v7.y, v7.z);
00128 glBegin(GL_LINE_STRIP);
00129 glVertex3fv(v0._v);
00130 glVertex3fv(v1._v);
00131 glVertex3fv(v3._v);
00132 glVertex3fv(v2._v);
00133 glVertex3fv(v0._v);
00134 glVertex3fv(v4._v);
00135 glVertex3fv(v6._v);
00136 glVertex3fv(v7._v);
00137 glVertex3fv(v5._v);
00138 glVertex3fv(v4._v);
00139 glVertex3fv(v6._v);
00140 glVertex3fv(v2._v);
00141 glVertex3fv(v3._v);
00142 glVertex3fv(v7._v);
00143 glVertex3fv(v5._v);
00144 glVertex3fv(v1._v);
00145 glEnd();
00146
00147 queue.push_back(node->GetLChild());
00148 queue.push_back(node->GetRChild());
00149 }
00150 }
00151 }
00152 }
00153 }
00157 virtual void Deinitialize()
00158 {
00159 }
00160 };
00161 };
00162
00163
00164 EXPORT_VRUT_MODULE_FUNCTIONS( _render )
00165
00166
00167 #endif