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
Zitat
Quellcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 vs_1_1 dcl_position v0 //zuerst die w mul r0.w v0.w c0.w mad r0.w v0.w c1.w r0.w mad r0.w v0.w c2.w r0.w mad r0.w v0.w c3.w r0.w move oPos.w r0.w // jetzt hab ich mir nen bein gestellt da ich nicht weis wie teilen geht rcp r0.w r0.w //x mul r0.x v0.x c0.x mad r0.x v0.x c1.x r0.x mad r0.x v0.x c2.x r0.x mad r0.x v0.x c3.x r0.x mul oPos.x r0.x r0.w //usw
Quellcode |
|
1 2 |
(src0.x * src1.x) + (src0.y * src1.y) + (src0.z * src1.z) + (src0.w * src1.w); |
Zitat von »"Nox"«
@dot Also wenn es um vertices geht ist die gpu alle mal schneller und nen m4x4 ist ein marco für 4x dot4. Das ist wiederum nichts anderes als:
Quellcode
1 2 (src0.x * src1.x) + (src0.y * src1.y) + (src0.z * src1.z) + (src0.w * src1.w);
nehmen wir an du zeichnest 2000 polygone auf den bildschirm.
entspricht 6000 vertices ( trianglelist ) und is für die verhältnisse in einem mordernen spiel gar nix ( grad mal ein modell ).
mit deiner methode brauchst du 20 anweisungen nur damit du dir das transponieren der matrix sparen kannst
und das pro vertex macht 120000 wenn mich nicht alles täuscht.
mit der cpu variante brauchst du die matrix nur einmal zu transponieren, was sicherlich nie 120000 anweisungen brauchen wird.
im vertex shader brauchst du dann nur mehr 4 anweisungen pro vertex was im endeffekt auf 24000 kommt was weit weniger arbeit als.
nix gegen deine methode, wenn sie funktioniert, dann wird sie das.
aber m4x4 is sicher schneller, sonst würden das schließlich alle so machen.
Quellcode |
|
1 2 3 4 5 |
struct sCamera { float x,y,z; float Yaw,Pitch,Roll; }; |
Zitat von »"Nox"«
@dot also der code von mir war flasch. Aber nach einigen Änderungen funzt es nun. Das Shader sample ist mit der Standard Einstellung und multisampling auf stufe 6 850 mit meiner version 990 fps schnell.
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
mov r10, r0; ; Transform position ; Transform position mul r0.x, r10.x, c0.x mul r1.x, r10.y, c1.x mul r2.x, r10.z, c2.x mul r3.x, r10.w, c3.x mul r0.y, r10.x, c0.y mul r1.y, r10.y, c1.y mul r2.y, r10.z, c2.y mul r3.y, r10.w, c3.y mul r0.z, r10.x, c0.z mul r1.z, r10.y, c1.z mul r2.z, r10.z, c2.z mul r3.z, r10.w, c3.z mul r0.w, r10.x, c0.w mul r1.w, r10.y, c1.w mul r2.w, r10.z, c2.w mul r3.w, r10.w, c3.w add r0, r0, r1 add r0, r0, r2 add oPos, r0, r3 |
Werbeanzeige