0 registered members (),
18,561
guests, and 5
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Spieglein, Spieglein an der Wand
[Re: Superku]
#389827
12/18/11 21:50
12/18/11 21:50
|
Joined: Apr 2006
Posts: 273 Germany, NRW
Meerkat
Member
|
Member
Joined: Apr 2006
Posts: 273
Germany, NRW
|
Ich würde vermuten das Icke keine Ahnung von Shadern hat die ich übrigens auch nicht habe Superku. Ich währ grundsätzlich dafür wenn bei der Engine die Shader mal von haus aus dabei währen da wirklich nicht jeder Shader programmieren kann. 
http://www.gpi-studios.comOS: Windows 7 Home Premium (64 Bit Version) AMD Athlon 64 X2 Dual Core Processor 5200+ 6gb DDR 2 - RAM NVIDIA GeForce GTX 460 GameStudio Version A8 Commercial
|
|
|
Re: Spieglein, Spieglein an der Wand
[Re: Meerkat]
#389868
12/19/11 07:45
12/19/11 07:45
|
Joined: Dec 2003
Posts: 1,225 germany
gri
Serious User
|
Serious User
Joined: Dec 2003
Posts: 1,225
germany
|
hi, das ganze ohne Shader... wenn du eine zusätzliche View (also camera ins level) erzeugst, wird der Ausschnitt auf dem Bildschirm gerendert.
VIEW* xView =
{
layer = 1;
pos_x = 0; //
pos_y = 100;
size_x = 100;
size_y = 100;
flags = SHOW;
}
hier so kannst du die Position und die Winkel im Level setzen...also was zu sehen sein soll....in deinem Fall aus der Spiegelwand raus.
vec_set(xView.x,my.x);
vec_set(xView.pan,my.pan);
Da du ja auf eine Entity= dein Spiegelmodell und nicht in die View rendern willst brauchst du wie schon richtig gedacht ein Model. Dein Spiegelblock sollte eine UV Map haben. Und in seiner Action zusätzlich folgenden Code.
xView.size_x = 1024;
xView.size_y = 1024;
xView.bmap = bmap_for_entity(my,0) ;
Viel Spaß, gri
"Make a great game or kill it early" (Bruce Shelley, Ensemble Studios)
|
|
|
Re: Spieglein, Spieglein an der Wand
[Re: gri]
#389966
12/20/11 16:03
12/20/11 16:03
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
Es ist korrekt, was gri schreibt, aber um einen Spiegel einigermaßen real zu simulieren, musst du die Kamera auch dynamisch gemäß der Ausrichtung des Spiegels positionieren. Wie ich nun schon zweimal geschrieben habe, ist ein Code für einen spiegelnden Boden in mtlFX.c enthalten, von Shadern hab ich nichts gesagt.
#ifdef MIRROR_DEBUG
VIEW* view_mirror = { layer = 1; }
#else
VIEW* view_mirror = { layer = -1; } // render mirror view before camera view
#endif
BMAP* bmap_mirrortarget = NULL;
var mtlfx_mirrorvisible = 0;
//Simulate a horizontal mirror by generating
//a camera view from below through the floor
function fx_mirror()
{
// do nothing if mirror is already running
if (bmap_mirrortarget) {
my.material.skin2 = bmap_mirrortarget;
return;
}
bmap_mirrortarget = bmap_createblack(256,256,888);
my.material.skin2 = bmap_mirrortarget;
view_mirror.bmap = bmap_mirrortarget;
view_mirror.size_x = bmap_width(view_mirror.bmap);
view_mirror.size_y = bmap_height(view_mirror.bmap);
vec_set(view_mirror.pnormal_x,vector(0,0,1.0)); // reflect upwards
set(view_mirror,NOSHADOW|NOCULL|PORTALCLIP);
// suppress shadows in the mirror, look through walls, and clip at portal plane
//enable: Suppress FLAG1 in mirror
//help: Don't display FLAG1 objects in the mirror views
//id: 23
set(view_mirror,NOFLAG1); // suppress all entities with flag1 set
//enable: Suppress particles in mirror
//help: Don't display particles in the mirror views
//id: 24
set(view_mirror,NOPARTICLE);
//enable: Suppress shaders in mirror
//help: Don't render material effects in the mirror views
//id: 25
set(view_mirror,NOSHADER);
while (bmap_mirrortarget)
{
proc_mode = PROC_LATE; // camera must be moved and mtlfx_mirrorvisible set before
if (mtlfx_mirrorvisible)
{
set(view_mirror,SHOW);
view_mirror.genius = camera.genius;
view_mirror.aspect = (screen_size.x/screen_size.y)*camera.aspect; // screen aspect, independent of render target
view_mirror.arc = camera.arc;
view_mirror.fog_start = camera.fog_start;
view_mirror.fog_end = camera.fog_end;
view_mirror.clip_far = camera.clip_far * 0.5;
view_mirror.clip_near = camera.clip_near * 2;
view_mirror.x = camera.x;
view_mirror.y = camera.y;
view_mirror.z = 2*view_mirror.portal_z-camera.z; // move the camera at its mirror position
view_mirror.pan = camera.pan;
view_mirror.tilt = -camera.tilt; // flip the vertical camera angle
view_mirror.roll = -camera.roll;
}
else {
// switch rendering off when all mirror objects are outside the frustum
reset(view_mirror,SHOW);
}
mtlfx_mirrorvisible = 0;
#ifdef MIRROR_DEBUG
if (key_f11) { // debugging - make mirror visible onscreen
view_mirror.bmap = NULL;
} else {
view_mirror.bmap = bmap_mirrortarget;
}
#endif
wait(1);
}
}
Die Default-Auflösung des benutzten Targets (der Bitmap bmap_mirrortarget) ist etwas erbärmlich, die solltest du/ ihr auf jeden Fall erhöhen. Wie schon gesagt, musst du dann die Position von view_mirror entsprechend anpassen, um einen vertikalen Spiegel zu erhalten.
"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual Check out my new game: Pogostuck: Rage With Your Friends
|
|
|
|