Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

11.05.2007, 20:49

zeig mal deinen code ;)

wegen mainboard: es geht nur darum, dass unter umständen in deinem PC kein performance counter drin is (was dazu führt, dass QueryPerformance*() fehlschlägt)...müsste man also nachschauen, aber normal hat jeder halbwegs moderne PC einen drin...

12

11.05.2007, 22:02

C-/C++-Quelltext

1
2
3
4
5
6
QueryPerformanceFrequency((LARGE_INTEGER*)(&ticksPerSecond));
...
QueryPerformanceCounter((LARGE_INTEGER*)(&start));
            Move();
            Render();
QueryPerformanceCounter((LARGE_INTEGER*)(&end));


Das mit den Matrizen hab ich nun gecheckt und es funktioniert auch. Da stellt sich aber gleich wieder ein neues Problem.
Wie kriege ich nun die absoluten Koordinaten der Vertices raus?
Mein ansatz war:
absolute Position des Objekts(Vektor) + Vertex Position im objectspace.

Das haut aber bei mir nicht so richtig hin.

13

14.05.2007, 22:00

kann sein,dass ich mich irre, aber du transformierst ja jeden einzelne koordinate eines objekts mit den matrizen.

nach der transformierung einfach die koordinate abfragen? oder eben die koordinate, nach der transformation abspeichern :)

aber wie gesagt, bin mir ned sicher,aber die besseren leute werden gleich antworten^^

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

14.05.2007, 22:02

Zitat von »"Toudy"«

absolute Position des Objekts(Vektor) + Vertex Position im objectspace.


naja, das haut genau nur so lange hin, wie die weltmatrix nur eine verschiebung ist. sobald rotiert wird stimmt das logischerweise nimmer...

wenn dus unbedingt ausrechnen willst (M = weltmatrix):

Quellcode

1
2
3
x_world = x_object * M._11 + y_object * M._21 + z_object * M._31 + M._41
y_world = x_object * M._12 + y_object * M._22 + z_object * M._32 + M._42
z_world = x_object * M._13 + y_object * M._23 + z_object * M._33 + M._43


das da oben gilt nur für die positionsvektoren.
für richtungsvektoren:

Quellcode

1
2
3
x_world = x_object * M._11 + y_object * M._21 + z_object * M._31
y_world = x_object * M._12 + y_object * M._22 + z_object * M._32
z_world = x_object * M._13 + y_object * M._23 + z_object * M._33


und normalvektoren musst du mit der inversen transponierten der weltmatrix transformieren.

15

15.05.2007, 23:11

ok, danke.
Beim versuch selber auf die lösung zu kommen, hab ich mir mal die fertige weltmatrix meines Objekts näher angeschaut und mir schon gedacht das da ein paar infos rauszuholen sind.
Was ich weis ist, dass die ersten drei einträge der untersten Zeile die Position meines Objekts beinhalten.
Kann mir einer erklären was ich noch da rausziehen kann und wie und wozu ich es verwende?
ausser dem was mir dot schon erklärt hat, danke nochmal an ihn.
@dot: allerdings könntest mir das mit der inversen transponierten matrix mal etwas genauer erklären :D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

16.05.2007, 09:13

Zitat von »"Toudy"«

@dot: allerdings könntest mir das mit der inversen transponierten matrix mal etwas genauer erklären :D


normalvektoren sind richtungsvektoren. das besondere an ihnen ist, dass sie immer normal auf die oberfläche stehen müssen.
wenn deine weltmatrix nur aus rotationen und verschiebungen besteht, dann kannst du normalvektoren wie alle anderen richtungsvektoren betrachten.
im allgemeinen fall, also irgendeine weltmatrix (z.b. mit irgendwelchen verschiedenen skalierungen in verschiedene richtungen), darfst du normalvektoren nichtmehr einfach nur wie jeden anderen richtungsvektor mit der weltmatrix transformieren, da der vektor nacher nichtmehr normal auf die oberfläche steht. das löst du, indem du für M nicht die weltmatrix, sondern die inverse transponierte der weltmatrix nimmst. warum hab ich hier (ganz unten) mal aufgeschrieben.

17

16.05.2007, 11:52

danke für deine Hilfe, werds mir gleich mal anschauen.

Werbeanzeige