[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20244] trunk/blender/source: BGE Dome: removing of size option and adding tilt option.
Dalai Felinto
dfelinto at gmail.com
Sun May 17 22:37:13 CEST 2009
Revision: 20244
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20244
Author: dfelinto
Date: 2009-05-17 22:37:13 +0200 (Sun, 17 May 2009)
Log Message:
-----------
BGE Dome: removing of size option and adding tilt option.
- Size adjustments can be accomplished with warp mesh data now. So we get a free spot in the GUI for a tilt option.
- Tilt option to tilt the camera (for planetarium domes).
Angle is in degree from -180 to +180. It's needed for planetarium domes (as this one http://domejunky.blogspot.com/2009/05/dome-corrected-bge.html ).
- This is the last commit regarding dome code I expected to 2.49. I consider this feature full implemented now. (working on docs now)
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/scene.c
trunk/blender/source/blender/blenloader/intern/readfile.c
trunk/blender/source/blender/makesdna/DNA_scene_types.h
trunk/blender/source/blender/src/buttons_scene.c
trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp
trunk/blender/source/gameengine/Ketsji/KX_Dome.h
trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.h
Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c 2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c 2009-05-17 20:37:13 UTC (rev 20244)
@@ -232,9 +232,9 @@
sce->r.stereomode = 1; // no stereo
sce->r.domeangle = 180;
sce->r.domemode = 1;
- sce->r.domesize = 1.0f;
sce->r.domeres = 4;
sce->r.domeresbuf = 1.0f;
+ sce->r.dometilt = 0;
sce->r.simplify_subsurf= 6;
sce->r.simplify_particles= 1.0f;
Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c 2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c 2009-05-17 20:37:13 UTC (rev 20244)
@@ -8082,9 +8082,9 @@
for (sce= main->scene.first; sce; sce= sce->id.next) {
sce->r.domeangle = 180;
sce->r.domemode = 1;
- sce->r.domesize = 1.0f;
sce->r.domeres = 4;
sce->r.domeresbuf = 1.0f;
+ sce->r.dometilt = 0;
}
/* DBVT culling by default */
for(wrld=main->world.first; wrld; wrld= wrld->id.next) {
Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h 2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h 2009-05-17 20:37:13 UTC (rev 20244)
@@ -318,9 +318,9 @@
/* Dome variables */
short domeres, domemode;
- short domeangle, pad9;
- float domesize;
+ short domeangle, dometilt;
float domeresbuf;
+ float pad2;
struct Text *dometext;
} RenderData;
Modified: trunk/blender/source/blender/src/buttons_scene.c
===================================================================
--- trunk/blender/source/blender/src/buttons_scene.c 2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/blender/src/buttons_scene.c 2009-05-17 20:37:13 UTC (rev 20244)
@@ -1832,11 +1832,11 @@
xco = 8;
uiBlockBeginAlign(block);
uiDefButS(block, ROW, 0, "Dome", xco, yco-=30, 88, 19, &(G.scene->r.stereomode), 7.0, 8.0, 0, 0, "Enables dome camera");
- uiDefButS(block, NUM, 0, "Ang:", xco+90, yco, 88, 19, &G.scene->r.domeangle, 90.0, 250.0, 0, 0, "Angle (Aperture) of the Dome - it only works in mode 1");
- uiDefButS(block, NUM, 0, "Mode:", xco+180, yco, 88, 19, &G.scene->r.domemode, 1.0, 3.0, 0, 0, "1 fisheye, 2 environment map, 3 spherical panoramic");
+ uiDefButS(block, NUM, 0, "Ang:", xco+90, yco, 88, 19, &G.scene->r.domeangle, 90.0, 250.0, 0, 0, "Angle (Aperture) of the Dome - it only works in mode 1 to 3");
+ uiDefButS(block, NUM, 0, "Mode:", xco+180, yco, 88, 19, &G.scene->r.domemode, 1.0, 5.0, 0, 0, "1 fulldome, 2 front-truncated, 3 rear-truncated, 4 environment map, 5 spherical panoramic");
- uiDefButF(block, NUM, 0, "Size:", xco, yco-=21, 88, 19, &G.scene->r.domesize, 0.5, 3.5, 0, 0, "Size adjustments");
- uiDefButS(block, NUM, 0, "Tes:", xco+90, yco, 88, 19, &G.scene->r.domeres, 1.0, 8.0, 0, 0, "Tesselation level - 1 to 8");
+ uiDefButS(block, NUM, 0, "Tilt:", xco, yco-=21, 88, 19, &G.scene->r.dometilt, -180.0, 180.0, 0, 0, "Dome tilt - camera rotation in horizontal axis");
+ uiDefButS(block, NUM, 0, "Tes:", xco+90, yco, 88, 19, &G.scene->r.domeres, 0.0, 8.0, 0, 0, "Tesselation level - check the generated mesh in wireframe mode");
uiDefButF(block, NUM, 0, "Res:", xco+180, yco, 88, 19, &G.scene->r.domeresbuf, 0.1, 1.0, 0, 0, "Buffer Resolution - decrease it to increase speed");
uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Warp Data: ", xco,yco-=21,268, 19, &G.scene->r.dometext, "Custom Warp Mesh data file");
Modified: trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp 2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp 2009-05-17 20:37:13 UTC (rev 20244)
@@ -376,7 +376,7 @@
//initialize Dome Settings
if(blscene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME)
- ketsjiengine->InitDome(blscene->r.domesize, blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle, blscene->r.domeresbuf, blscene->r.dometext);
+ ketsjiengine->InitDome(blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle, blscene->r.domeresbuf, blscene->r.dometilt, blscene->r.dometext);
if (sceneconverter)
{
Modified: trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp 2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp 2009-05-17 20:37:13 UTC (rev 20244)
@@ -701,7 +701,7 @@
//initialize Dome Settings
if(m_startScene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME)
- m_ketsjiengine->InitDome(m_startScene->r.domesize, m_startScene->r.domeres, m_startScene->r.domemode, m_startScene->r.domeangle, m_startScene->r.domeresbuf, m_startScene->r.dometext);
+ m_ketsjiengine->InitDome(m_startScene->r.domeres, m_startScene->r.domemode, m_startScene->r.domeangle, m_startScene->r.domeresbuf, m_startScene->r.dometilt, m_startScene->r.dometext);
// Set the GameLogic.globalDict from marshal'd data, so we can
// load new blend files and keep data in GameLogic.globalDict
Modified: trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp 2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp 2009-05-17 20:37:13 UTC (rev 20244)
@@ -43,23 +43,23 @@
RAS_IRenderTools* rendertools,
/// engine
KX_KetsjiEngine* engine,
-
- float size, //size for adjustments
+
short res, //resolution of the mesh
short mode, //mode - fisheye, truncated, warped, panoramic, ...
short angle,
float resbuf, //size adjustment of the buffer
+ short tilt,
struct Text* warptext
):
dlistSupported(false),
canvaswidth(-1), canvasheight(-1),
m_drawingmode(engine->GetDrawType()),
- m_size(size),
m_resolution(res),
m_mode(mode),
m_angle(angle),
m_resbuffer(resbuf),
+ m_tilt(tilt),
m_canvas(canvas),
m_rasterizer(rasterizer),
m_rendertools(rendertools),
@@ -124,7 +124,7 @@
CreateMeshPanorama();
m_numfaces = 6;
break;
- default: //DOME_TRUNCATED_DOWN and DOME_TRUNCATED_UP
+ default: //DOME_TRUNCATED_FRONT and DOME_TRUNCATED_REAR
if (m_angle <= 180){
cubetop.resize(1);
cubebottom.resize(1);
@@ -269,7 +269,7 @@
bool KX_Dome::CreateDL(){
dlistId = glGenLists((GLsizei) m_numimages);
if (dlistId != 0) {
- if(m_mode == DOME_FISHEYE || m_mode == DOME_TRUNCATED_UP || m_mode == DOME_TRUNCATED_DOWN){
+ if(m_mode == DOME_FISHEYE || m_mode == DOME_TRUNCATED_FRONT || m_mode == DOME_TRUNCATED_REAR){
glNewList(dlistId, GL_COMPILE);
GLDrawTriangles(cubetop, nfacestop);
glEndList();
@@ -1485,13 +1485,14 @@
Uses 5 cameras for angles up to 250\xBA
Uses 6 cameras for angles up to 360\xBA
*/
+ int i;
float deg45 = MT_PI / 4;
MT_Scalar c = cos(deg45);
MT_Scalar s = sin(deg45);
if (m_angle <= 180 && (m_mode == DOME_FISHEYE
- || m_mode == DOME_TRUNCATED_UP
- || m_mode == DOME_TRUNCATED_DOWN)){
+ || m_mode == DOME_TRUNCATED_FRONT
+ || m_mode == DOME_TRUNCATED_REAR)){
m_locRot[0] = MT_Matrix3x3( // 90\xBA - Top
c, -s, 0.0,
@@ -1514,8 +1515,8 @@
s, 0.0, c);
} else if (m_mode == DOME_ENVMAP || (m_angle > 180 && (m_mode == DOME_FISHEYE
- || m_mode == DOME_TRUNCATED_UP
- || m_mode == DOME_TRUNCATED_DOWN))){
+ || m_mode == DOME_TRUNCATED_FRONT
+ || m_mode == DOME_TRUNCATED_REAR))){
m_locRot[0] = MT_Matrix3x3( // 90\xBA - Top
1.0, 0.0, 0.0,
@@ -1579,6 +1580,23 @@
0.0, 1.0, 0.0,
s, 0.0, c);
}
+
+ // rotating the camera in horizontal axis
+ if (m_tilt)
+ {
+ float tiltdeg = ((m_tilt % 360) * 2 * MT_PI) / 360;
+ c = cos(tiltdeg);
+ s = sin(tiltdeg);
+
+ MT_Matrix3x3 tilt_mat = MT_Matrix3x3(
+ 1.0, 0.0, 0.0,
+ 0.0, c, -s,
+ 0.0, s, c
+ );
+
+ for (i =0;i<6;i++)
+ m_locRot[i] = tilt_mat * m_locRot[i];
+ }
}
void KX_Dome::RotateCamera(KX_Camera* cam, int i)
@@ -1621,10 +1639,10 @@
case DOME_PANORAM_SPH:
DrawPanorama();
break;
- case DOME_TRUNCATED_UP:
+ case DOME_TRUNCATED_FRONT:
DrawDomeFisheye();
break;
- case DOME_TRUNCATED_DOWN:
+ case DOME_TRUNCATED_REAR:
DrawDomeFisheye();
break;
}
@@ -1670,9 +1688,6 @@
ortho_width = (float)can_width/can_height * ortho_height;
}
- ortho_width /= m_size;
- ortho_height /= m_size;
-
glOrtho((-ortho_width), ortho_width, (-ortho_height), ortho_height, -20.0, 10.0);
}
@@ -1803,20 +1818,17 @@
ortho_height = 1.0;
}
- ortho_width /= m_size;
- ortho_height /= m_size;
-
glOrtho((-ortho_width), ortho_width, (-ortho_height), ortho_height, -20.0, 10.0);
}
}
- else if(m_mode == DOME_TRUNCATED_UP)
+ else if(m_mode == DOME_TRUNCATED_FRONT)
{
ortho_width = 1.0;
ortho_height = 2 * ((float)can_height/can_width) - 1.0 ;
glOrtho((-ortho_width), ortho_width, (-ortho_height), ortho_width, -20.0, 10.0);
}
- else { //m_mode == DOME_TRUNCATED_DOWN
+ else { //m_mode == DOME_TRUNCATED_REAR
ortho_width = 1.0;
ortho_height = 2 * ((float)can_height/can_width) - 1.0 ;
@@ -1901,9 +1913,6 @@
ortho_width = (float)can_width/can_height * 0.5;
ortho_height = 0.5;
}
-
- ortho_width /= m_size;
- ortho_height /= m_size;
glOrtho((-ortho_width), ortho_width, (-ortho_height), ortho_height, -20.0, 10.0);
}
@@ -1972,7 +1981,6 @@
int can_height = m_viewport.GetTop();
double screen_ratio = can_width/ (double) can_height;
- screen_ratio /= m_size;
glOrtho(-screen_ratio,screen_ratio,-1.0,1.0,-20.0,10.0);
Modified: trunk/blender/source/gameengine/Ketsji/KX_Dome.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Dome.h 2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/gameengine/Ketsji/KX_Dome.h 2009-05-17 20:37:13 UTC (rev 20244)
@@ -40,12 +40,12 @@
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list