Project img on X-Y surface to a cylinder placed in center....

Click For Summary
SUMMARY

The discussion focuses on projecting an image (IMG_A) onto a cylindrical mirror, resulting in a deformed image (IMG_B). The user has implemented a MATLAB code to wrap IMG_A around the cylinder but seeks to achieve a more accurate representation of IMG_B. Key concepts include ray tracing, parametric coordinates, and the intersection of rays with geometric shapes, specifically a cylinder and a plane. The viewing angle is fixed at 30 degrees, influencing the calculations for the reflection vector and the resulting image projection.

PREREQUISITES
  • Understanding of MATLAB programming and syntax
  • Knowledge of ray tracing techniques in computer graphics
  • Familiarity with parametric equations for lines and geometric shapes
  • Concepts of reflection and light behavior in 3D space
NEXT STEPS
  • Research ray tracing algorithms and their implementation in MATLAB
  • Learn about parametric equations for intersecting rays with cylinders and planes
  • Explore techniques for pixel-by-pixel image rendering and color calculation
  • Investigate the effects of light intensity and distance on color representation in graphics
USEFUL FOR

This discussion is beneficial for computer graphics developers, MATLAB programmers, and anyone interested in image projection techniques and ray tracing methodologies.

Amirps
Messages
2
Reaction score
0
Hi ,
I came across a problem ,I've search a lot but couldn't exactly find the solution.
here is my problem:
suppose there is an image ( I call it IMG_A),place IMG_A in the X-Y plane , put a mirror cylinder at the center of IMG_A. what we see in the cylinder mirror is a deform image (I call it IMG_B) . what I try to achieve by this program is IMG_B.
I've already write a piece of code in Matlab using this equation

for i=1:IMG_A_Width
for j=1:IMG_A_Height
cy(i,j,1)=cyradius*cos(i*(2*pi/IMG_A_Width)) ;%cylinder X
cy(i,j,2)=cyradius*(sin(i*(2*pi/IMG_A_Width)));%cylinder Y
cy(i,j,3)=j*(cyHeight/IMG_A_Height) ;%cylinder Z
cy(i,j,4)=IMG_A(i,j);%cylinder image
end
end
but this is not exactly what I want ,this program just wrap the IMG_A around the cylinder. in other words the warping is in the horizontal direction.would you please be kind enough helping me to understand the equation I need to write this program?
 
Physics news on Phys.org
Before you start writing code: how do you look into the mirror? That will influence the picture you see.
Try to solve the problem for some random viewing direction, by working against the direction of the light: where does your viewing direction hit the mirror? Where is the reflected viewing direction, and where does it hit the xy plane?
 
Fou
mfb said:
Before you start writing code: how do you look into the mirror? That will influence the picture you see.
Try to solve the problem for some random viewing direction, by working against the direction of the light: where does your viewing direction hit the mirror? Where is the reflected viewing direction, and where does it hit the xy plane?
fortunately the viewing angel is constant and it is 30 degrees.
[the light will travel at the angel of 30 degrees from XY plane and hit the mirror ]
 
That sounds like a ray-tracing problem in computer graphics.

You want to think in terms of eye-rays and parametric coordinates with planes (your image) and cylinders (the deformed image)
You have the starting point (Vs) for each ray (where the eye is) and the direction (unit vector Vd) where that ray goes.
The first place that rays hits anything gives a parametric coordinate u. Each point and vector is three components (x,y,z)

R = Vs + u.Vd

A plane is defined as P = A.x + B.y + C.z + D = 0

A cylinder is defined as C = A.x^2 + B.y^2

You want to intersect your ray R with the cylinder, calculate the reflection vector of that ray, and where the reflected vector hits the plane.

Here's some reference material:
http://www.cl.cam.ac.uk/teaching/1999/AGraphHCI/SMAG/node2.html
 
  • Like
Likes   Reactions: Amirps and mfb
I would just add to #4 that a natural way to do this is pixel by pixel. For each pixel, you want to know how to color it. Calculating where the ray from the eye through the center of the pixel, after being reflected by the cylinder, hits the plane — if it hits the plane at all — will determine what color the pixel should be. For more realism you might want to decrease the intensity of that color in proportion to the squared length of the entire light ray (i.e., from the eye to the cylinder to the plane).
 
  • Like
Likes   Reactions: Amirps

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
Replies
13
Views
2K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
Replies
4
Views
3K
  • · Replies 10 ·
Replies
10
Views
3K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K