3d i Visual Basic
- Swech
- EF Sponsor
- Inlägg: 4745
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
3d i Visual Basic
Håller på med ett projekt där jag behöver rita en bild på ett mönsterkort (utan komponenter, scannad bild av verkligt kort)
Bara slänga upp en JPG / BMP i ett fönster har jag koll på men jag vill rita upp det hela tiltat i 3d så man ser kortet i perspektiv in i skärmen.
Kortet skall ritas upp i ett VisualBasic program, windows... inga pingviner eller annat....
Någon som har några tips/ kan peka åt rätt håll med exempel.....
Swech
Bara slänga upp en JPG / BMP i ett fönster har jag koll på men jag vill rita upp det hela tiltat i 3d så man ser kortet i perspektiv in i skärmen.
Kortet skall ritas upp i ett VisualBasic program, windows... inga pingviner eller annat....
Någon som har några tips/ kan peka åt rätt håll med exempel.....
Swech
Re: 3d i Visual Basic
Har den scannade bilden någon som helst Z (höjd) information?
Om inte, hur ska en programvara veta vad som är högre än något annat?
Det är ju bara en platt bild...
Om inte, hur ska en programvara veta vad som är högre än något annat?
Det är ju bara en platt bild...
- Swech
- EF Sponsor
- Inlägg: 4745
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: 3d i Visual Basic
Det är endast mönsterkortet som skall presenteras. Den har Z = 0 över hela bilden , inga komponenter alltså
Däremot kommer ett munstycke att behöva ritas in med ett eget z > 0 värde som då "svävar" ovanför kortet.
Swech
Däremot kommer ett munstycke att behöva ritas in med ett eget z > 0 värde som då "svävar" ovanför kortet.
Swech
- Jan Almqvist
- Inlägg: 1651
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: 3d i Visual Basic
Att göra en avbildning från R^3 till R^2 låter som en kul programmeringsuppgift oavsett OS.
- Swech
- EF Sponsor
- Inlägg: 4745
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: 3d i Visual Basic
Jag vill alltså att Test1 skall visas som Test2
Swech
Swech
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: 3d i Visual Basic
Nu är det inte visual basic, men i java så finns det bra funktioner för att manipulera bilder. Det där skulle man kunna uppnå med Javas AffineTransform .shear . Kanske det finns något liknande i VB?
Re: 3d i Visual Basic
Kanske inte ändå förresten. Vid närmare eftertanke så förflyttar shear bara pixlarna i sidled eller upp och ner. Men det borde kunna gå att räkna ut värdet för varje pixel med en liten loop.
- Jan Almqvist
- Inlägg: 1651
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: 3d i Visual Basic
Två loopar, en för x, en för y, GetPixel(), lite matematik. SetPixel(), Klart.
Re: 3d i Visual Basic
Roade mig lite med att sätta ihop det i Java...
Kod: Markera allt
package ImageTo3D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Mats
*/
public class Main {
public static void main (String[] args) {
BufferedImage startImage;
final double scaleX = 0.7;
final double scaleY = 0.7;
try {
startImage = ImageIO.read( new File("C:\\Users\\Mats\\Downloads\\test1.jpg") );
int startImgWidth = startImage.getWidth();
int startImgHeight = startImage.getHeight();
int midPointX = startImgWidth / 2;
int img3DWidth = startImgWidth;
int img3DHeight = (int) (startImgHeight * scaleY);
BufferedImage img3D = new BufferedImage( img3DWidth, img3DHeight, BufferedImage.TYPE_BYTE_INDEXED);
for ( int x = 0 ; x < img3DWidth; x++ ){
for ( int y = 0 ; y < img3DHeight; y++ ) {
double scaleLine = scaleX + (1-scaleX) * (double) y / (double) img3DHeight;
if ( x==0 ) System.out.println(scaleLine);
int transformPixelX = (int) ( (x - midPointX) / scaleLine + midPointX );
int transformPixelY = (int) ( y / scaleY);
int pixelData;
if ( transformPixelX < 0 || transformPixelX >= startImgWidth) pixelData = 0xFFFFFF; // Vit pixel
else pixelData = startImage.getRGB(transformPixelX, transformPixelY);
img3D.setRGB(x, y, pixelData);
}
}
ImageIO.write(img3D, "jpg", new File( "C:\\Users\\Mats\\Downloads\\output.jpg" ) );
} catch (IOException ex) {
System.out.println( ex.getMessage());
}
}
}
Re: 3d i Visual Basic
Ursäkta den usla (obefintliga) kommenteringen. Det är heller ingen medelvärdesbildning av de pixlar som man hämtar data ifrån så resultatet blir inte så bra som det skulle kunna bli om man fick med det också.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: 3d i Visual Basic
Ingen orsak. Det är så kul att programmera sånt. Men tänk om man kunde lära sig att kommentera nån gång... De gånger jag har lyckats med att "komma igång" med bra kommentering så brukar jag skriva vad jag tänker göra i kommentarer innan jag går på själva kodandet. Då blir oftast också koden stilig och välfungerande eftersom man tvingas tänka igenom vad man skall göra i förväg.
Re: 3d i Visual Basic
I openGL så kan man skapa en sk quad och sedan lägga en bild som textur. Då kan man vrida och vända på den.