problem mit vec_to_screen [solved]

Posted By: metal

problem mit vec_to_screen [solved] - 03/18/10 14:46

hi,
ich versuche per vec_to_screen und draw_text den namen eines models über dessen kopf anzuzeigen, aber irgendwas haut da nicht hin und ich komm nicht drauf wo was falsch läuft.

der name wird zwar angezeigt, aber er flimmert quer über den bildschirm, anstatt über dem model zu bleiben.

hier der code:



typedef struct Starsystem{
STRING* name;
int x;
int y;
ENTITY* my_mdl;
struct Starsystem* next;
} Starsystem;


typedef struct{
Starsystem* first;
} List_Starsystem;

List_Starsystem* g_List_Starsystem={first=NULL;}


function init_starsystems(){
planet = ent_create("ball.mdl",vector(0,0,0),NULL);
Starsystem* tempsys = malloc(sizeof(Starsystem));
memset(tempsys,0,sizeof(Starsystem));
tempsys.name= "System1";
tempsys.x=0;
tempsys.y=0;
tempsys.my_mdl=planet;
tempsys.next=NULL;
g_List_Starsystem.first=tempsys;


planet = ent_create("ball.mdl",vector(128,-256,0),NULL);
Starsystem* tempsys = malloc(sizeof(Starsystem));
memset(tempsys,0,sizeof(Starsystem));
tempsys.name= "System2";
tempsys.x=128;
tempsys.y=-256;
tempsys.my_mdl=planet;
tempsys.next=NULL;
g_List_Starsystem.first.next=tempsys;


}






function debug_text(){
var tempvar[3];
me=g_List_Starsystem.first.next.my_mdl;
tempvar[0]=my.x;
tempvar[1]=my.y;
tempvar[2]=my.z+50;

while(1){
vec_to_screen(tempvar,camera);

if(vec_to_screen(tempvar,camera)!=NULL){
draw_text(g_List_Starsystem.first.next.name,tempvar[0],tempvar[1],vector(100,100,255));
}

draw_text(str_for_num(NULL,tempvar[1]),10,40,vector(100,100,2550));
draw_text(str_for_num(NULL,my.x),10,80,vector(100,100,255));

wait(1);
}
}



function main(){
...
init_starsystems();
debug_text();
}




die letzten beiden draw_text anweisungen hab ich eingebaut, um zu schauen was mit den koordinaten los ist, da zeigt die zweite anweisung 128 an, was auch so stimmt und die erste ändert sich laufend.


hat jemand ne ahnung wo da der fehler liegt...bin langsam zu blind um da noch weiterzukommen frown
Posted By: Xarthor

Re: problem mit vec_to_screen - 03/18/10 15:22

Ist jetzt mehr geraten aber evtl löst sich das problem wenn du diese drei zeilen an den anfang der while loop schreibst (also mit in die while loop hinein):
Code:
tempvar[0]=my.x;
tempvar[1]=my.y;
tempvar[2]=my.z+50;



Denn: vec_to_screen übersetzt von welt koordinaten in bildschirm koordinaten.
also machst du wahrscheinlich einmal das richtige welt koordinaten -> bildschirm koordinaten und anschließend werden jedesmal die bildschirm koordinaten wieder umgewandelt in bildschirmkoordinaten

Kann mich aber auch irren.

edit:
Quote aus dem manual dazu:
Quote:

Converts the XYZ coordinates of the given vector to screen coordinates. After the instruction, the X and Y coordinates of the vector contain the XY screen position and the Z coordinate contains the distance to the screen plane.

Dürfte also ein problem wenn nicht das problem sein.
Posted By: metal

Re: problem mit vec_to_screen - 03/18/10 15:43

ah danke...die zeilen gehören tatsächlich in die schleife rein laugh
jetzt flimmerts nicht mehr quer übern bildschirm..wird zwar immer noch nicht über dem model angezeigt, aber zumindest einf ehler weniger.....mal guggen ob ich den rest noch hinbekomme.
danke dir!

EDIT: Problem gelöst. lag daran, dass ich vec_to_screen ein 2tes mal in der if-bedingung aufgerufen hab
...kaum zu glauben, 2h nach dem fehler gesucht aber auf die zwei kleinigkeiten komm ich nicht..kopf->tisch grin
© 2024 lite-C Forums