Box um Mesh zeichnen?
Übersicht

PacManiBetreff: Box um Mesh zeichnen? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich bastele gerade an einem Level-Editor in dem man bestimmte Meshes laden und nachträglich bearbeiten kann (d.h. Größer ändern, verschieben etc.) Um das aktive Mesh anzuzeigen, dachte ich mir, ich mache eine Box... ![]() und umrande dann das aktive Mesh damit in dem ich die Box auf die gleiche Größe wie das ausgewählte Mesh bringe. Allerdings scheitere ich daran, die Box ist letztenendes viel zu groß (s. weiße Linien hinten - hier ist die Landschaft ein großes Mesh und ausgewählt, das Mesh hat auf jeden Fall eine kleinere Größe), da ich auch nicht so ganz weiß wie ich die Größe des aktiven Meshes herausfinden und übertragen soll: ![]() Derzeit sieht's so aus - Changer ist die besagte Umrandungsbox: Code: [AUSKLAPPEN] CameraPick(Camera, MX, MY)
If Picked = 0 Then HideEntity Changer Else ShowEntity Changer PositionEntity Changer, EntityX(PickedEntity()), EntityY(PickedEntity()), EntityZ(PickedEntity()) ScaleEntity Changer, 0, 0, 0 ScaleEntity Changer, MeshWidth(PickedEntity()), MeshHeight(PickedEntity()), MeshDepth(PickedEntity()) RotateEntity Changer, EntityPitch(PickedEntity()), EntityYaw(PickedEntity()), EntityRoll(PickedEntity()) End If |
||
- Zuletzt bearbeitet von PacMani am So, Feb 21, 2010 16:30, insgesamt einmal bearbeitet
OldSkool90 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielleicht geht es mit MeshHeight: https://www.blitzforum.de/help/MeshHeight
damit müsste man ja eigentlich die Höhe des Meshs herrausfinden. denke ich ![]() |
||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Benutze ich aber schon, s. Code Z. 8. Da kommen anscheinend viel zu große Werte heraus, wie man im Screenshot erkennen kann. | ||
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ganz ehrlich, die Art tut ja in den Augen weh! Ich würde eine Bounding Box ermitteln, und dann mit CameraProject![]() ![]() |
||
Starfare: Worklog, Website (download) |
- Zuletzt bearbeitet von ZaP am So, Feb 21, 2010 16:32, insgesamt einmal bearbeitet
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das klingt logisch... nur habe ich irgendein Problem mit Line schon vorher entdeckt: bei mir wird IMMER nur die letzte Line-Anweisung in Graphics3D ausgeführt und somit ist max. nur eine Linie sichtbar :S... das ist aber ein anderes Thema...
aber geht das wirklich nicht so wie ich es mir dachte? Kann man die Größe eines Meshes nicht auf das andere übertragen? |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also bezüglich der Line-Lösung:
Zeichne die Linien nach Renderworld. Mit dem Skalieren: Ohne mich groß auszukennen würde ich FitMesh ![]() Oder wenn du es mit Scale-Mesh machen willst musst du aus der aktuellen Größe des "Changer" und der Größe des PickedEntity einen scale-faktor ausrechnen - da ScaleEntity ![]() Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
- Zuletzt bearbeitet von Eingeproggt am So, Feb 21, 2010 16:35, insgesamt einmal bearbeitet
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch, MeshWidth![]() ![]() ![]() Line ![]() ![]() |
||
Starfare: Worklog, Website (download) |
OldSkool90 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Verrechne die Werte mal Folgendermaßen, dann dürfte es eigentlich gehen:
MeshBreite/BoxBreite = ScaleBreite BoxBreite * ScaleBreite = MeshBreite etc.etc. EDIT: als Code müsste das so aussehen(sry hab kein B3D sonst würd ichs testen): Code: [AUSKLAPPEN] ScaleEntity Box,(MeshWidth(Mesh)/MeshWidth(Box)),(MeshHeight(Mesh)/MeshHeight(Box)),(MeshDepth(Mesh)/MeshDepth(Box))
hoffe so klappt es! |
||
- Zuletzt bearbeitet von OldSkool90 am So, Feb 21, 2010 16:44, insgesamt 3-mal bearbeitet
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
oder skalier die box mittels fitmesh auf 1,1,1 | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Eingeproggt: Ja, das ist schon peinlich, wenn man das mit RenderWorld und den Lines nicht beachtet *schäm* ![]() ![]() Habe jetzt allerdings erstmal Oldskoolz Idee umgesetzt... die Größe stimmt, nur irgendwas klappt mit den Koordinaten / Mittelpunkt nicht: ![]() EDIT: Das liegt daran, dass der Mittelpunkt des Level-Modells nicht in der Mitte liegt :S wie soll ich dann die Box richtig positionieren? |
||
OldSkool90 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Könntest die Box neu positionieren.
Code: [AUSKLAPPEN] PositionEntity Box,EntityX(Mesh),EntityY(Mesh),EntityZ(Mesh)
|
||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das geht ja nicht, weil der Mittelpunkt des Level-Meshes nicht in der Mitte liegt (bei der Box aber schon).... | ||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
geh alle vertices des meshs durch und bestimme so manuell wo es anfängt und aufhört mit vertexx/y/z | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
OldSkool90 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ach so meinst du das hmm...das is problematisch...da bin ich überfragt und kann leider auch zeitlich grade nicht helfen, da ich weg muss^^ | ||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Goodjee hat Folgendes geschrieben: geh alle vertices des meshs durch und bestimme so manuell wo es anfängt und aufhört mit vertexx/y/z
Das beachtet aber die Skalierung und Rotierung des Entitys nicht. Daher muss man zusätzlich noch per TFormPoint ![]() ![]() |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, ich dachte jetzt das kann ich noch, aber da bin ich überfordert ![]() |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn du die größe direkt nach dem laden bestimmst und abspeicherst kannst du dir das mit tformpoint auch sparen | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich glaube ich stelle markierte Objekte einfach heller dar ![]() Nein im Ernst, ich weiß jetzt nicht wirklich wie ich vorgehen soll... aber ich setze mich nachher nochmal ran. |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
ungefähr so:
Code: [AUSKLAPPEN] For i=1 To CountSurfaces(mesh) surface=GetSurface(mesh,i) For j=0 To CountVertices(surface)-1 If(i=0 And j=0) minx=VertexX(surface,j) maxx=VertexX(surface,j) miny=VertexY(surface,j) maxy=VertexY(surface,j) minz=VertexZ(surface,j) maxz=VertexZ(surface,j) Else If(VertexX(surface,j)<minx) minx=VertexX(surface,j) If(VertexX(surface,j)>maxx) maxx=VertexX(surface,j) If(VertexY(surface,j)<miny) miny=VertexY(surface,j) If(VertexY(surface,j)>maxy) maxy=VertexY(surface,j) If(VertexZ(surface,j)<minz) minz=VertexZ(surface,j) If(VertexZ(surface,j)>maxz) maxz=VertexZ(surface,j) EndIf Next Next |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jup! Das klappt prima ![]() ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group