📄 prompts1.c
字号:
"DKB/POV-Ray output is obsolete but still works. See \"Ray Tracing Output\" in\n\
the online documentation."};
if(RAY == 1)
stopmsg(0,msg);
}
BRIEF = uvalues[k++].uval.ch.val;
strcpy(ray_name,uvalues[k++].uval.sval);
Targa_Out = uvalues[k++].uval.ch.val;
/* check ranges */
if(previewfactor < 2)
previewfactor = 2;
if(previewfactor > 2000)
previewfactor = 2000;
if(sphere && !SPHERE)
{
SPHERE = TRUE;
set_3d_defaults();
}
else if(!sphere && SPHERE)
{
SPHERE = FALSE;
set_3d_defaults();
}
if(glassestype < 0)
glassestype = 0;
if(glassestype > 3)
glassestype = 3;
if(glassestype)
whichimage = 1;
if (RAY < 0)
RAY = 0;
if (RAY > 7)
RAY = 7;
if (!RAY)
{
k = 0;
choices[k++] = "make a surface grid";
choices[k++] = "just draw the points";
choices[k++] = "connect the dots (wire frame)";
choices[k++] = "surface fill (colors interpolated)";
choices[k++] = "surface fill (colors not interpolated)";
choices[k++] = "solid fill (bars up from \"ground\")";
if(SPHERE)
{
choices[k++] = "light source";
}
else
{
choices[k++] = "light source before transformation";
choices[k++] = "light source after transformation";
}
for (i = 0; i < k; ++i)
attributes[i] = 1;
helpmode = HELP3DFILL;
i = fullscreen_choice(CHOICEHELP,hdg1,NULL,NULL,k,choices,attributes,
0,0,0,FILLTYPE+1,NULL,NULL,NULL,NULL);
helpmode = oldhelpmode;
if (i < 0)
goto restart_1;
FILLTYPE = i-1;
if(glassestype)
{
if(get_funny_glasses_params())
goto restart_1;
}
if (check_mapfile())
goto restart_1;
}
restart_3:
if(SPHERE)
{
k = -1;
LOADPROMPTS3D("Longitude start (degrees)");
LOADPROMPTS3D("Longitude stop (degrees)");
LOADPROMPTS3D("Latitude start (degrees)");
LOADPROMPTS3D("Latitude stop (degrees)");
LOADPROMPTS3D("Radius scaling factor in pct");
}
else
{
k = -1;
if (!RAY)
{
LOADPROMPTS3D("X-axis rotation in degrees");
LOADPROMPTS3D("Y-axis rotation in degrees");
LOADPROMPTS3D("Z-axis rotation in degrees");
}
LOADPROMPTS3D("X-axis scaling factor in pct");
LOADPROMPTS3D("Y-axis scaling factor in pct");
}
k = -1;
if (!(RAY && !SPHERE))
{
uvalues[++k].uval.ival = XROT ;
uvalues[k].type = 'i';
uvalues[++k].uval.ival = YROT ;
uvalues[k].type = 'i';
uvalues[++k].uval.ival = ZROT ;
uvalues[k].type = 'i';
}
uvalues[++k].uval.ival = XSCALE ;
uvalues[k].type = 'i';
uvalues[++k].uval.ival = YSCALE ;
uvalues[k].type = 'i';
LOADPROMPTS3D("Surface Roughness scaling factor in pct");
uvalues[k].type = 'i';
uvalues[k].uval.ival = ROUGH ;
LOADPROMPTS3D("'Water Level' (minimum color value)");
uvalues[k].type = 'i';
uvalues[k].uval.ival = WATERLINE ;
if(!RAY)
{
LOADPROMPTS3D("Perspective distance [1 - 999, 0 for no persp])");
uvalues[k].type = 'i';
uvalues[k].uval.ival = ZVIEWER ;
LOADPROMPTS3D("X shift with perspective (positive = right)");
uvalues[k].type = 'i';
uvalues[k].uval.ival = XSHIFT ;
LOADPROMPTS3D("Y shift with perspective (positive = up )");
uvalues[k].type = 'i';
uvalues[k].uval.ival = YSHIFT ;
LOADPROMPTS3D("Image non-perspective X adjust (positive = right)");
uvalues[k].type = 'i';
uvalues[k].uval.ival = xtrans ;
LOADPROMPTS3D("Image non-perspective Y adjust (positive = up)");
uvalues[k].type = 'i';
uvalues[k].uval.ival = ytrans ;
LOADPROMPTS3D("First transparent color");
uvalues[k].type = 'i';
uvalues[k].uval.ival = transparent[0];
LOADPROMPTS3D("Last transparent color");
uvalues[k].type = 'i';
uvalues[k].uval.ival = transparent[1];
}
LOADPROMPTS3D("Randomize Colors (0 - 7, '0' disables)");
uvalues[k].type = 'i';
uvalues[k++].uval.ival = RANDOMIZE;
if (SPHERE)
s = s1;
else
s = s2;
helpmode = HELP3DPARMS;
k = fullscreen_prompt(s,k,prompts3d,uvalues,0,0,NULL);
helpmode = oldhelpmode;
if (k < 0)
goto restart_1;
k = 0;
if (!(RAY && !SPHERE))
{
XROT = uvalues[k++].uval.ival;
YROT = uvalues[k++].uval.ival;
ZROT = uvalues[k++].uval.ival;
}
XSCALE = uvalues[k++].uval.ival;
YSCALE = uvalues[k++].uval.ival;
ROUGH = uvalues[k++].uval.ival;
WATERLINE = uvalues[k++].uval.ival;
if (!RAY)
{
ZVIEWER = uvalues[k++].uval.ival;
XSHIFT = uvalues[k++].uval.ival;
YSHIFT = uvalues[k++].uval.ival;
xtrans = uvalues[k++].uval.ival;
ytrans = uvalues[k++].uval.ival;
transparent[0] = uvalues[k++].uval.ival;
transparent[1] = uvalues[k++].uval.ival;
}
RANDOMIZE = uvalues[k++].uval.ival;
if (RANDOMIZE >= 7) RANDOMIZE = 7;
if (RANDOMIZE <= 0) RANDOMIZE = 0;
if ((Targa_Out || ILLUMINE || RAY))
if(get_light_params())
goto restart_3;
EXIT_OVLY;
return(0);
}
/* --------------------------------------------------------------------- */
static int get_light_params()
{
static char far hdg[]={"Light Source Parameters"};
char far *prompts3d[13];
struct fullscreenvalues uvalues[13];
int k;
int oldhelpmode;
/* defaults go here */
k = -1;
if (ILLUMINE || RAY)
{
LOADPROMPTS3D("X value light vector");
uvalues[k].type = 'i';
uvalues[k].uval.ival = XLIGHT ;
LOADPROMPTS3D("Y value light vector");
uvalues[k].type = 'i';
uvalues[k].uval.ival = YLIGHT ;
LOADPROMPTS3D("Z value light vector");
uvalues[k].type = 'i';
uvalues[k].uval.ival = ZLIGHT ;
if (!RAY)
{
LOADPROMPTS3D("Light Source Smoothing Factor");
uvalues[k].type = 'i';
uvalues[k].uval.ival = LIGHTAVG ;
LOADPROMPTS3D("Ambient");
uvalues[k].type = 'i';
uvalues[k].uval.ival = Ambient;
}
}
if (Targa_Out && !RAY)
{
LOADPROMPTS3D("Haze Factor (0 - 100, '0' disables)");
uvalues[k].type = 'i';
uvalues[k].uval.ival= haze;
if (!Targa_Overlay)
check_writefile(light_name,".tga");
LOADPROMPTS3D("Targa File Name (Assume .tga)");
uvalues[k].type = 's';
strcpy(uvalues[k].uval.sval,light_name);
LOADPROMPTS3D("Back Ground Color (0 - 255)");
uvalues[k].type = '*';
LOADPROMPTS3D(" Red");
uvalues[k].type = 'i';
uvalues[k].uval.ival = (int)back_color[0];
LOADPROMPTS3D(" Green");
uvalues[k].type = 'i';
uvalues[k].uval.ival = (int)back_color[1];
LOADPROMPTS3D(" Blue");
uvalues[k].type = 'i';
uvalues[k].uval.ival = (int)back_color[2];
LOADPROMPTS3D("Overlay Targa File? (Y/N)");
uvalues[k].type = 'y';
uvalues[k].uval.ch.val = Targa_Overlay;
}
LOADPROMPTS3D("");
oldhelpmode = helpmode;
helpmode = HELP3DLIGHT;
k = fullscreen_prompt(hdg,k,prompts3d,uvalues,0,0,NULL);
helpmode = oldhelpmode;
if (k < 0)
return(-1);
k = 0;
if (ILLUMINE)
{
XLIGHT = uvalues[k++].uval.ival;
YLIGHT = uvalues[k++].uval.ival;
ZLIGHT = uvalues[k++].uval.ival;
if (!RAY)
{
LIGHTAVG = uvalues[k++].uval.ival;
Ambient = uvalues[k++].uval.ival;
if (Ambient >= 100) Ambient = 100;
if (Ambient <= 0) Ambient = 0;
}
}
if (Targa_Out && !RAY)
{
haze = uvalues[k++].uval.ival;
if (haze >= 100) haze = 100;
if (haze <= 0) haze = 0;
strcpy(light_name,uvalues[k++].uval.sval);
/* In case light_name conflicts with an existing name it is checked
again in line3d */
k++;
back_color[0] = (char)uvalues[k++].uval.ival % 255;
back_color[1] = (char)uvalues[k++].uval.ival % 255;
back_color[2] = (char)uvalues[k++].uval.ival % 255;
Targa_Overlay = uvalues[k].uval.ch.val;
}
return(0);
}
/* --------------------------------------------------------------------- */
static int check_mapfile()
{
extern BYTE dacbox[256][3];
extern BYTE olddacbox[256][3];
int askflag = 0;
int i,oldhelpmode;
strcpy(temp1,"*");
if (mapset)
strcpy(temp1,MAP_name);
if (!(glassestype == 1 || glassestype == 2))
askflag = 1;
else
strcpy(temp1,funnyglasses_map_name);
while (TRUE) {
if (askflag) {
oldhelpmode = helpmode;
helpmode = -1;
i = field_prompt(0,"\
Enter name of .MAP file to use,\n\
or '*' to use palette from the image to be loaded.",
NULL,temp1,60,NULL);
helpmode = oldhelpmode;
if (i < 0)
return(-1);
if (temp1[0] == '*') {
mapset = 0;
break;
}
}
memcpy(olddacbox,dacbox,256*3); /* save the DAC */
i = ValidateLuts(temp1);
memcpy(dacbox,olddacbox,256*3); /* restore the DAC */
if (i != 0) { /* Oops, somethings wrong */
askflag = 1;
continue;
}
mapset = 1;
strcpy (MAP_name,temp1);
break;
}
return(0);
}
static int get_funny_glasses_params()
{
static char far hdg[]={"Funny Glasses Parameters"};
char far *prompts3d[10];
struct fullscreenvalues uvalues[10];
int k;
int oldhelpmode;
/* defaults */
if(ZVIEWER == 0)
ZVIEWER = 150;
if(eyeseparation == 0)
{
if(fractype==IFS3D || fractype==LLORENZ3D || fractype==FPLORENZ3D)
{
eyeseparation = 2;
xadjust = -2;
}
else
{
eyeseparation = 3;
xadjust = 0;
}
}
if(glassestype == 1)
strcpy(funnyglasses_map_name,Glasses1Map);
else if(glassestype == 2)
{
if(FILLTYPE == -1)
strcpy(funnyglasses_map_name,"grid.map");
else
strcpy(funnyglasses_map_name,"glasses2.map");
}
k = -1;
LOADPROMPTS3D("Interocular distance (as % of screen)");
uvalues[k].type = 'i';
uvalues[k].uval.ival= eyeseparation;
LOADPROMPTS3D("Convergence adjust (positive = spread greater)");
uvalues[k].type = 'i';
uvalues[k].uval.ival = xadjust;
LOADPROMPTS3D("Left red image crop (% of screen)");
uvalues[k].type = 'i';
uvalues[k].uval.ival = red_crop_left;
LOADPROMPTS3D("Right red image crop (% of screen)");
uvalues[k].type = 'i';
uvalues[k].uval.ival = red_crop_right;
LOADPROMPTS3D("Left blue image crop (% of screen)");
uvalues[k].type = 'i';
uvalues[k].uval.ival = blue_crop_left;
LOADPROMPTS3D("Right blue image crop (% of screen)");
uvalues[k].type = 'i';
uvalues[k].uval.ival = blue_crop_right;
LOADPROMPTS3D("Red brightness factor (%)");
uvalues[k].type = 'i';
uvalues[k].uval.ival = red_bright;
LOADPROMPTS3D("Blue brightness factor (%)");
uvalues[k].type = 'i';
uvalues[k].uval.ival = blue_bright;
if(glassestype == 1 || glassestype == 2)
{
LOADPROMPTS3D("Map File name");
uvalues[k].type = 's';
strcpy(uvalues[k].uval.sval,funnyglasses_map_name);
}
oldhelpmode = helpmode;
helpmode = HELP3DGLASSES;
k = fullscreen_prompt(hdg,k+1,prompts3d,uvalues,0,0,NULL);
helpmode = oldhelpmode;
if (k < 0)
return(-1);
k = 0;
eyeseparation = uvalues[k++].uval.ival;
xadjust = uvalues[k++].uval.ival;
red_cro
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -