Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] Polilinea in 3D

Vorrei visualizzare sullo schermo un polilinea tridimensionale
composta da un centinaio di punti di cui conosco X, Y e Z. Conosco
anche le coordinate del punto di vista (Xv, Yv, Zv) e le coordinate
del punto dov'è diretto lo sguardo (Xs, Ys, Zs).
Non dovrebbe essere difficile, ma ... non riesco.
Qualcuno mi aiuta ?
Non vorrei usare librerie particolari (DirectX, OpenGL o altro); solo
puro VB6.
Grazie.
Marce

marcellobnz ha scritto...

Guarda se questo esempio 3D Engine in VB Code ti può andar bene:
http://tinyurl.com/6b5nd7
--
Ciao Fede
By Chicco Production
http://bcp.freetools.it


L'esempio è abbastanza complicato perchè io possa utilizzarlo per il
mio progettino. Sono riuscito a leggere il mio file testo con le
coordinate X, Y e Z e a visualizzare la relativa polilinea in 3D. Non
riesco però ad impostare un corretto "punto di ripresa" e soprattutto
non riesco a visualizzare contemporaneamente, nella finestra, una
fotografia caricata da un file con la solita istruzione LoadPicture.
Inoltre, poichè il mio progettino comprende dei "calcoli inversi" (a
partire da un ben definito pixel (X,Y) devo poter ricavare, conoscere
le coordinate (X,Y,Z) reali) mi è abbastanza difficile interagire con
questo engine 3D. Forse, per il mio scopo, sarebbe sufficiente un
esempio molto più semplice, da poter rielaborare ed adattare. Non mi
servono funzioni tipo rotazione, translazione, zoom e simili.
Hai qualche altra indicazione, considerando che che ho visto dal tuo
sito che hai una certa abilità nella grafica 3D ?
Grazie ancora
Marce

Scriveva 
marce...@gmail.com
 mercoledì, 10/09/2008:

Io l'avevo fatto con lo ZX Spectrum 48k in Basic.
E con le freccine cambiavo il punto di vista on the fly.
Ovvio però che non avevo messo il mascheramento delle parti nascoste, 
visto che già così aveva tempi di refresh di un paio di minuti ogni 
spostamento...
Se sai spippolare con Seno e Coseno, non è impossibile, ci vuole solo 
pazienza.
Ciao
Alberto
-- 
Fabio Fazio: Se siamo alleati come mai nei nostri bar si vende Coca 
Cola e nei bar americani non si vende l'amaretto di Saronno?

 pazienza.
Veramente io mi sono limitato a realizzare una prima versione senza
utilizzare la trigonometria ma solo le più semplici (e probabilmente
velociti) proporzioni. E viene fuori un risultato non convincente (la
polilinea è distorta).
' KX e KY sono due fattori di trasformazione
' ValoreMinimoX, Y, Z sono i valori minimi delle rispettive coordinate
for i=1 to TotalePunti - 1
  Distanza1 = Sqr((Px(i) - PuntoRipresaX) ^ 2 + (Py(i) -
PuntoRipresaY) ^ 2)
  Distanza2 = Sqr((Px(i + 1) - PuntoRipresaX) ^ 2 + (Py(i + 1) -
PuntoRipresaY) ^ 2)
  X1 = KX * (Px(i) - ValoreMinimoX) / Distanza1             '
coordinata orizzontale punto iniziale
  Y1 = 600 - (KY * (Pz(i) - ValoreMinimoZ) / Distanza1)     '
coordinata verticale punto iniziale
  X2 = KX * (Px(i + 1) - ValoreMinimoX) / Distanza2         '
coordinata orizzontale punto finale
  Y2 = 600 - (KY * (Pz(i + 1) - ValoreMinimoZ) / Distanza2) '
coordinata verticale  punto finale
  With Linea(i)
      .X1 = X1
      .Y1 = Y1
      .X2 = X2
      .Y2 = Y2
  End With
next i
Ciao
Marce

sito che hai una certa abilità nella grafica 3D ?
Ho usato un esempio simile, adattandolo alle mie esigenze,
proprio come devi fare tu.


 questo engine 3D. Forse, per il mio scopo, sarebbe sufficiente un
piccolo commento a questa frase: i sistemi proiettivi ( che siano 
assonometrici o prospettici ) non sono in generale invertibili, in 
quanto un punto sul piano di proiezione corrisponde, in generale, ad una 
intera retta nello spazio reale


 intera retta nello spazio reale
Questo e' vero, appunto, nel caso generale ma, in pratica,
quando nello spazio 3D sono contenuti degli oggetti (punti,
vertici di poliedri, curve definite da punti successivi, etc...),
e' possibile "puntare" uno di questi enti con una ricerca nel
piano X-Y proiettato; bisogna, ovviamente, stare attenti a non
capitare proprio nel caso in cui, dietro all' ente puntato, ve
ne sia un altro nascosto (ma anche cosi', complicando un po' il
codice, e' possibile trovare delle scappatoie).  Vedi, e.g., i
progetti SurFit e Poliedri nel mio sito di "DownLoads".
Al posto di Marcello io cercherei i due (n) punti piu' vicini,
da una parte e dall' altra, alle coordinate X, Y del puntatore
del mouse e poi, con un' interpolazione (lineare, quadratica, ...)
troverei le corrispondenti coordinate sulla curva.
Ciao e buona fine settimana a tutti.
Franco
Web: 
http://www.flanguasco.org