[eq-dev] Multi-Projector with Equalizer

36 views
Skip to first unread message

maxtangli

unread,
Jun 2, 2012, 5:47:46 AM6/2/12
to eq-...@equalizergraphics.com
HI, guys.
I'm trying to setup Multi-Projector with Equalizer, and I have to do
DIFFERENT image-processing for the image in each window. I go through the
tutorials but still get no idea.
Anyone get some ideas?
Thanks.

--
View this message in context: http://software.1713.n2.nabble.com/Multi-Projector-with-Equalizer-tp7580243.html
Sent from the Equalizer - Parallel Rendering mailing list archive at Nabble.com.

_______________________________________________
eq-dev mailing list
eq-...@equalizergraphics.com
http://www.equalizergraphics.com/cgi-bin/mailman/listinfo/eq-dev
http://www.equalizergraphics.com

Stefan Eilemann

unread,
Jun 4, 2012, 2:55:45 AM6/4/12
to eq-...@equalizergraphics.com
Morning,

On 2. Jun 2012, at 11:47, maxtangli [via Software] wrote:

> I'm trying to setup Multi-Projector with Equalizer, and I have to do DIFFERENT image-processing for the image in each window. I go through the tutorials but still get no idea.

I infer from the context that you are trying to do something like per-projector distortion correction!? If not, please give a bit of background on what you're trying to do.

Ideally this should be integrated into Equalizer, where a per-segment setting references the appropriate distortion map. As a workaround, you can do this in Channel::frameViewFinish using a special channel name. If you use multi-view layouts, we need to implement issue #125 first.


HTH,

Stefan.

--
http://www.eyescale.ch
http://www.equalizergraphics.com
http://www.linkedin.com/in/eilemann





--
View this message in context: http://software.1713.n2.nabble.com/Multi-Projector-with-Equalizer-tp7580243p7580284.html

maxtangli

unread,
Jun 7, 2012, 12:21:59 AM6/7/12
to eq-...@equalizergraphics.com

Stefan Eilemann wrote
>
>
> On 2. Jun 2012, at 11:47, maxtangli [via Software] wrote:
>
> Ideally this should be integrated into Equalizer, where a per-segment
> setting references the appropriate distortion map. As a workaround, you
> can do this in Channel::frameViewFinish using a special channel name. If
> you use multi-view layouts, we need to implement issue #125 first.
>
>

Hi,stefan.
Thanks for your advice. I'm setting up tiled muti-projectors on unplannar
surface, therefore geometry correction and other per-frame image operations
is required. For each projector/segment the operations is different.

I think it should be like this:

frameViewFinish(frameID, frameNumber)
{
if (channel.getName() == "channel1")
find Frame with frameID in channel.getOutputFrames() ?
do image operations to the image belongs to this Frame ?
else
...
}

I have two questions:
1. I want to get the frames belongs to a segment/projector. Will
channel.getOutputFrames() do this right?

2. how can I get the image data belongs to a Frame ? I find
Frame.getFrameData() holds serveral images, I can't tell which image belongs
to the current Frame.

Thanks.
maxtangli.

--
View this message in context: http://software.1713.n2.nabble.com/Multi-Projector-with-Equalizer-tp7580243p7580319.html

Stefan Eilemann

unread,
Jun 7, 2012, 2:49:46 AM6/7/12
to eq-...@equalizergraphics.com

On 7. Jun 2012, at 6:21, maxtangli [via Software] wrote:

> I'm setting up tiled muti-projectors on unplannar surface, therefore geometry correction and other per-frame image operations is required. For each projector/segment the operations is different.
>
> I think it should be like this:
>
> frameViewFinish(frameID, frameNumber)
> {
> if (channel.getName() == "channel1")
> find Frame with frameID in channel.getOutputFrames() ?
> do image operations to the image belongs to this Frame ?
> else
> ...
> }
>
> I have two questions:
> 1. I want to get the frames belongs to a segment/projector. Will channel.getOutputFrames() do this right?

You should not operate on the compositing frames, but on the back buffer of the channel. One, you might not have compositing (the channel renders itself). Two, in frameView/SegmentFinish the image already has been assembled.

What other typically to is to blit the back buffer into a texture, clear the back buffer and render the texture with distortion correction to it.


HTH,

Stefan.



--
View this message in context: http://software.1713.n2.nabble.com/Multi-Projector-with-Equalizer-tp7580243p7580320.html

maxtangli

unread,
Jun 8, 2012, 12:51:55 AM6/8/12
to eq-...@equalizergraphics.com

Stefan Eilemann wrote
>
> On 7. Jun 2012, at 6:21, maxtangli [via Software] wrote:
>
> You should not operate on the compositing frames, but on the back buffer
> of the channel.
>
> What other typically to is to blit the back buffer into a texture, clear
> the back buffer and render the texture with distortion correction to it.
>

Thanks very much. I find it convient to modify channel::frameViewFinish in
seq.
My question is: to operate the back buffer in channel::frameViewFinish, will
the opengl functions such as glReadBuffer,glWriteBuffer be OK ? or should I
use equalizer-provided functions to get the back buffer?

Thanks.
maxtangli.

--
View this message in context: http://software.1713.n2.nabble.com/Multi-Projector-with-Equalizer-tp7580243p7580326.html

Stefan Eilemann

unread,
Jun 8, 2012, 2:44:17 AM6/8/12
to eq-...@equalizergraphics.com

On 8. Jun 2012, at 6:51, maxtangli [via Software] wrote:

> My question is: to operate the back buffer in channel::frameViewFinish, will the opengl functions such as glReadBuffer,glWriteBuffer be OK ? or should I use equalizer-provided functions to get the back buffer?

You've got full access to the OpenGL context from all the Channel::frameFoo functions, so it's ok to use glReadBuffer & friends. You only need to take into account the pixel viewport (and a few others in Draw).


HTH,

Stefan.



--
View this message in context: http://software.1713.n2.nabble.com/Multi-Projector-with-Equalizer-tp7580243p7580328.html

maxtangli

unread,
Jun 20, 2012, 10:50:50 PM6/20/12
to eq-...@equalizergraphics.com

Stefan Eilemann wrote
>
> On 8. Jun 2012, at 6:51, maxtangli [via Software] wrote:
>
> You've got full access to the OpenGL context from all the
> Channel::frameFoo functions, so it's ok to use glReadBuffer & friends. You
> only need to take into account the pixel viewport (and a few others in
> Draw).
>

Hi, stefan.
Thanks for your advice.

But what do you mean by " take into account the pixel viewport"?
I tried glReadPixels&glDrawPixels in Channel::frameViewFinish, but the
results seems strange.

Thanks.
maxtangli

--
View this message in context: http://software.1713.n2.nabble.com/Multi-Projector-with-Equalizer-tp7580243p7580564.html

Stefan Eilemann

unread,
Jun 21, 2012, 2:03:51 AM6/21/12
to eq-...@equalizergraphics.com

On 21. Jun 2012, at 4:50, maxtangli [via Software] wrote:

> Stefan Eilemann wrote
> On 8. Jun 2012, at 6:51, maxtangli [via Software] wrote:
>
>> You've got full access to the OpenGL context from all the Channel::frameFoo functions, so it's ok to use glReadBuffer & friends. You only need to take into account the pixel viewport (and a few others in Draw
> But what do you mean by " take into account the pixel viewport"?
> I tried glReadPixels&glDrawPixels in Channel::frameViewFinish, but the results seems strange.

I mean using Channel::getPixelViewport for you read pixels.

I'm pretty sure your read pixels (or setup) is wrong, we're using it in the compositing process and others did distortion correction with Eq already (http://www.mcs.csueastbay.edu/~tebo/papers/SIGGRAPH2010.pdf).


HTH,

Stefan.



--
View this message in context: http://software.1713.n2.nabble.com/Multi-Projector-with-Equalizer-tp7580243p7580566.html

maxtangli

unread,
Jun 21, 2012, 10:53:33 PM6/21/12
to eq-...@equalizergraphics.com

Stefan Eilemann wrote
>
>> Stefan Eilemann wrote
>> On 8. Jun 2012, at 6:51, maxtangli [via Software] wrote:
>>
> I mean using Channel::getPixelViewport for you read pixels.
>

I'm sorry, but I don't understand the concept of pixel viewport. I go
through the website but I can't find any documents about it.

the code should be like this:
const eq::fabric::PixelViewport& pv = getPixelViewport();
// QUESTION: what should I do?
glReadPixels(0,0,readDrawWidth,readdrawHeight,GL_RGB,GL_UNSIGNED_BYTE,pixels);
...
glDrawPixels(...);

I'm sorry for bother you so much, but I don't understand equalizer's
internal principle very well.
Would you please give me some suggestions on how to learn equalizer?

Thanks very much.
maxtangli

--
View this message in context: http://software.1713.n2.nabble.com/Multi-Projector-with-Equalizer-tp7580243p7580579.html

Stefan Eilemann

unread,
Jun 22, 2012, 2:43:42 AM6/22/12
to eq-...@equalizergraphics.com

On 22. Jun 2012, at 4:53, maxtangli [via Software] wrote:

> I'm sorry, but I don't understand the concept of pixel viewport. I go through the website but I can't find any documents about it.

It's the 2D area of the window used by the channel, in pixels.

> the code should be like this:
> const eq::fabric::PixelViewport& pv = getPixelViewport();
> // QUESTION: what should I do?
> glReadPixels(0,0,readDrawWidth,readdrawHeight,GL_RGB,GL_UNSIGNED_BYTE,pixels);
> ...
> glDrawPixels(...);

Using pv.w and pv.h would be a good start. Understanding glReadPixels and associated state (e.g. glRasterPos, glPixelStore) is essential. The Channel::frameReadback code does the same thing, though this is unnecessarily complex for your use case.

> I'm sorry for bother you so much, but I don't understand equalizer's internal principle very well.
> Would you please give me some suggestions on how to learn equalizer?

I suggest reading the Programming Guide and general OpenGL documentation.


HTH,

Stefan.



--
View this message in context: http://software.1713.n2.nabble.com/Multi-Projector-with-Equalizer-tp7580243p7580581.html
Reply all
Reply to author
Forward
0 new messages