POV-Ray : Newsgroups : povray.binaries.images : I've seen the light! : Re: I've seen the light! Server Time
7 Nov 2024 04:50:50 EST (-0500)
  Re: I've seen the light!  
From: clipka
Date: 1 Dec 2016 15:51:52
Message: <58408d68@news.povray.org>
Am 01.12.2016 um 21:24 schrieb Mike Horvath:
> On 12/1/2016 2:37 PM, clipka wrote:
>> Am 01.12.2016 um 20:26 schrieb clipka:
>>> Am 01.12.2016 um 18:16 schrieb scott:
>>>>> Turns out the core module is already better than I had feared.
>>>>> Still, it
>>>>> has highlighted various issues that still need sorting out -- mostly
>>>>> expected (such as failure to set various default values upon object
>>>>> construction), but a few I did not expect, like some compile-time
>>>>> config
>>>>> settings that don't come with defaults.
>>>>
>>>> I guess you noticed already, but your checkered plane didn't seem to
>>>> work properly either ;-)
>>>
>>> Bah - checkered planes are for wussies. I'm much more worried about the
>>> gamma handling... ;)
>>
>> BTW, here's a demonstration of why I think general-purpose programming
>> languages are ill-suited for scene description:
>>
>>     pov::Sphere* pSphere(new pov::Sphere);
>>     pSphere->Center = pov::Vector3d(0,0,0);
>>     pSphere->Radius = 1;
>>     pSphere->Texture = new pov::TEXTURE();
>>     pSphere->Texture->Type = pov::PLAIN_PATTERN; // TODO shouldn't
>> need this
>>     pSphere->Texture->Pigment = new pov::PIGMENT();
>>     pSphere->Texture->Pigment->Type = pov::PLAIN_PATTERN; // TODO
>> shouldn't
>> need this
>>     pSphere->Texture->Pigment->colour =
>> pov_base::TransColour(pov_base::MathColour(1));
>>     pSphere->Texture->Finish = new pov::FINISH();
>>     pSphere->Texture->Finish->Ambient = pov_base::MathColour(0.05);
>>     pSphere->Texture->Finish->Diffuse = 0.1;
>>     pSphere->Texture->Finish->Brilliance = 1.0;
>>     pSphere->Texture->Finish->BrillianceAdjust = 1.0;
>>     pSphere->Texture->Finish->Specular = 2.0;
>>     pSphere->Texture->Finish->Roughness = 100;
>>     pSphere->Texture->Finish->Reflection_Min = pov::MathColour(0.0);
>>     pSphere->Texture->Finish->Reflection_Max = pov::MathColour(1.0);
>>     pSphere->Texture->Finish->Reflect_Exp = 1.0;
>>     pSphere->Texture->Finish->Reflect_Metallic = true;
>>     pSphere->Texture->Finish->Reflection_Fresnel = false;
>>     pScene->objects.push_back(pSphere);
>>
>>     pov::Plane* pPlane(new pov::Plane);
>>     pPlane->Normal_Vector = pov::Vector3d(0, 1, 0).normalized();
>>     pPlane->Distance = 1;
>>     pPlane->Texture = new pov::TEXTURE();
>>     pPlane->Texture->Type = pov::PLAIN_PATTERN;
>>     pPlane->Texture->Pigment = new pov::PIGMENT();
>>     pPlane->Texture->Pigment->Type = pov::GENERIC_PATTERN;
>>     pPlane->Texture->Pigment->pattern = pov::PatternPtr(new
>> pov::CheckerPattern);
>>     pov::ColourBlendMap* pCheckerMap(new pov::ColourBlendMap);
>>     pov::ColourBlendMapEntry CheckerMapEntry;
>>     CheckerMapEntry.value = 0;
>>     CheckerMapEntry.Vals = pov::ToTransColour(pov_base::RGBFTColour(0, 0,
>> 0, 0, 0));
>>     pCheckerMap->Blend_Map_Entries.push_back(CheckerMapEntry);
>>     CheckerMapEntry.value = 1;
>>     CheckerMapEntry.Vals = pov::ToTransColour(pov_base::RGBFTColour(1, 1,
>> 1, 0, 0));
>>     pCheckerMap->Blend_Map_Entries.push_back(CheckerMapEntry);
>>     pPlane->Texture->Pigment->Blend_Map =
>> pov::GenericPigmentBlendMapPtr(pCheckerMap);
>>     pPlane->Texture->Finish = new pov::FINISH();
>>     pPlane->Texture->Finish->Ambient = pov_base::MathColour(0.1);
>>     pPlane->Texture->Finish->Diffuse = 0.7;
>>     pPlane->Texture->Finish->Brilliance = 1.0;
>>     pPlane->Texture->Finish->BrillianceAdjust = 1.0;
>>     pPlane->Texture->Finish->Specular = 0.0;
>>     pPlane->Texture->Finish->Roughness = 100;
>>     pScene->objects.push_back(pPlane);
>>
>>     pov::LightSource* pLight(new pov::LightSource);
>>     pLight->Center = pov::Vector3d(-1, 1, 1).normalized() * 100;
>>     pLight->colour = pov_base::MathColour(0.7);
>>     pLight->index = 0; // TODO shouldn't need this
>>     pScene->lightSources.push_back(pLight);
>>
>> Yup, that's just a plain simple RSOCP scene.
>>
> 
> 
> Can't you use shorthand object notation?
> 
> pPlane =
> {
>     Texture =
>     {
>         Finish =
>         {
>             Ambient = pov_base::MathColour(0.1),
>             Diffuse = 0.7,
>             Brilliance = 1.0,
>         }
>     }
> }
> 
> And so on...

/If/ the language in question supports such a notation, it typically
gets you as far as the point where you want to apply a series of
transformations.

Also, "pov_base::MathColour(0.1)" is a very cumbersome way of writing
"rgb 0.1", and "pov::Vector3d(-1,1,1)" is a very cumbersome way of
writing "<-1,1,1>".

I agree that C++ is probably one of the more ill-suited languages for an
SDL, but other general-purpose languages all suffer from similar
problems to some extent.


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.