Pixelkoords zu Vertexkoords

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Shark

Betreff: Pixelkoords zu Vertexkoords

BeitragDi, Okt 03, 2006 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Community.
Kennt jemand von euch vielleicht eine Formel oder besitzt ein Tut, das beschreibt wie man Pixelkoords zu Vertexkoords transformieren kann?

Ich persönlich war nicht faul und hab mich mal hin gehockt und mir das mal angeschaut in welchem Verhältnis Vertexpunkte zu Pixelpunkte stehen.
Code: [AUSKLAPPEN]
;Pixelkoords to Vertexkoords?
Graphics3D 800,600,16,1
SetBuffer BackBuffer()

camera=CreateCamera()
light=CreateLight()
CameraClsMode camera,0,1
CameraRange camera,1,GraphicsWidth()*2
PositionEntity camera,0,0,-5
RotateEntity light,90,0,0

;Erstellt ein Single Surface!
Global test = Create_Sprite()

Global texture = LoadTexture("ende.png")
EntityTexture test,texture

Repeat
Cls

   RenderWorld()
   ;Das Gitter ist für mich dazu da gewesen
   ;um zuschauen wo die Vertexpunkte sind/verlaufen.
   For x = 0 To 10
      Rect 0+x*80,0,1,600,1
      Rect 0,60+x*80,800,1,1
   Next
   
   Flip 0
Until KeyHit(1)
End

;Erstellt ein Single Surface!
Function Create_Sprite()
Local k#=1,x=200,y=100,weit=10,hoehe=10
brush=CreateBrush()
mesh=CreateMesh()
surface=CreateSurface(mesh,brush)

;Wird später gebraucht...
;If x11 <> 400 And x11 > 400 Then
;   x1 = x11-400
;   v3=AddVertex(surface,(x1*10)/800,k,0,0,0)
;ElseIf x11 <> 400 And x11 < 400 Then
;   x1 = 400-x11
;   v3=AddVertex(surface,-(x1*10)/800,k,0,0,0)
;ElseIf x11 = 400
;   v3=AddVertex(surface,0,k,0,0,0)
;EndIf
   
v0=AddVertex(surface,(((x*10)/800)+((weit*10)/800)),Float((y*7.5)/600),0,1,0)                  ;obenrechts
v1=AddVertex(surface,(((x*10)/800)+((weit*10)/800)),Float-(((y*7.5)/600)+((hoehe*7.5)/600)),0,1,1)    ;untenrechts
v2=AddVertex(surface,-((x*10)/800),Float-(((y*7.5)/600)+((hoehe*7.5)/600)),0,0,1)               ;untenlinks
v3=AddVertex(surface,-((x*10)/800),Float((y*7.5)/600),0,0,0)                                 ;obenlinks
AddTriangle(surface,v0,v1,v2)
AddTriangle(surface,v3,v0,v2)
UpdateNormals mesh
Return mesh
End Function


Es ist natürlich noch nicht vollständig und läuft nicht richtig.
Ein Problem ist z. B. , dass Pixelkoordinaten oben links anfangen und Vertex genau in der Mitte.
Konnte es bis jetzt noch nicht hinbekommen.

Noch etwas zum Code!
Mit der Formel ((x*10)/800) rechne ich den Vertexpunkt für x aus!
Warum die 10 dort?
Ganz einfach bei 800 pixel gibt es 10 Vertexkoords.
bei y gibt es statt dessen 7,5.

Ich hoffe jemand kann mir helfen


mfg Shark
 

Dreamora

BeitragDi, Okt 03, 2006 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Dafür gibt es einen einfachen Befehl: CAMERAPROJECT
http://www.blitzbase.de/befehl...roject.htm
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Shark

BeitragDi, Okt 03, 2006 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke schön!
Man lernt immer wieder mehr dazu Very Happy
 

Shark

BeitragDo, Okt 05, 2006 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mich mal heute an den Pc gehockt und hab mir mal den Befehl angeschaut und da steht!
Zitat:
Die Anweisung CAMERAPROJECT errechnet aus den absoluten 3D-Raumkoordinaten die 2D-Bildschirmkoordinaten.

Was genau das falsche ist Laughing !
Denn ich will aus den 2D-Blidschirmkoordinaten 3D-Raumkoordinaten errechnen.

mfg Shark

Willi die Rübe

BeitragDo, Okt 05, 2006 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit CameraPick() und PickedX..Y..Z
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon
Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX

At the Farewell Party visit: MySpace | Homepage

skey-z

BeitragDo, Okt 05, 2006 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist recht einfach

erstelle eine ebene, die du mittels alpha komplett durchsichtig machst, diese musst du mit entitypickmode für das picking freischalten

mit camerapick werden aus den 2D Koordinaten 3D koordinaten, die mittels
pickedx pickedy und pickedz empfangen werden können
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

Shark

BeitragFr, Okt 06, 2006 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, danke an allen die mir geholfen haben.
Eigentlich war das ganz anders gemeint Very Happy

Ich wollte mir eine SingleSurface Engine basteln wo man die
Bildschirmkoordinaten X und Y und Weite und Höhe der Grafik eingeben sollte .
Ich habe dann weiter drüber nach gedacht und habs selber hinbekommen.

Lösungsweg.
Die Kamera einfach verschieben, sodass man keine Positive und Negative Einteilung auf dem Bildschirm hat!

In meinem Fall war das so!
Code: [AUSKLAPPEN]
PositionEntity camera,5,-3.75,-5


Ich werde dann mal weiter programmieren nochmal danke an alle Wink

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group