3d i Visual Basic

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4745
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

3d i Visual Basic

Inlägg av Swech »

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
sodjan
EF Sponsor
Inlägg: 43246
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: 3d i Visual Basic

Inlägg av sodjan »

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...
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4745
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: 3d i Visual Basic

Inlägg av Swech »

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
Användarvisningsbild
Jan Almqvist
Inlägg: 1651
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: 3d i Visual Basic

Inlägg av Jan Almqvist »

Att göra en avbildning från R^3 till R^2 låter som en kul programmeringsuppgift oavsett OS.
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: 3d i Visual Basic

Inlägg av Andax »

Sök på OpenGL och Visual Basic.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4745
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: 3d i Visual Basic

Inlägg av Swech »

Jag vill alltså att Test1 skall visas som Test2

Swech
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
meconer
EF Sponsor
Inlägg: 497
Blev medlem: 27 april 2010, 20:07:46
Ort: Järfälla

Re: 3d i Visual Basic

Inlägg av meconer »

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?
meconer
EF Sponsor
Inlägg: 497
Blev medlem: 27 april 2010, 20:07:46
Ort: Järfälla

Re: 3d i Visual Basic

Inlägg av meconer »

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.
Användarvisningsbild
Jan Almqvist
Inlägg: 1651
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: 3d i Visual Basic

Inlägg av Jan Almqvist »

Två loopar, en för x, en för y, GetPixel(), lite matematik. SetPixel(), Klart.
meconer
EF Sponsor
Inlägg: 497
Blev medlem: 27 april 2010, 20:07:46
Ort: Järfälla

Re: 3d i Visual Basic

Inlägg av meconer »

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());
        }
        
    }
    

}
meconer
EF Sponsor
Inlägg: 497
Blev medlem: 27 april 2010, 20:07:46
Ort: Järfälla

Re: 3d i Visual Basic

Inlägg av meconer »

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å.
output.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4745
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: 3d i Visual Basic

Inlägg av Swech »

:bravo: Tackar för detta exempel.
Resultatet är fullt tillräckligt

Swech
meconer
EF Sponsor
Inlägg: 497
Blev medlem: 27 april 2010, 20:07:46
Ort: Järfälla

Re: 3d i Visual Basic

Inlägg av meconer »

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.
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: 3d i Visual Basic

Inlägg av Andax »

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.
Skriv svar